aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java')
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java
new file mode 100644
index 00000000..90acceb9
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java
@@ -0,0 +1,154 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.config.guiconfig;
+
+import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig;
+import kr.syeyoung.dungeonsguide.features.AbstractFeature;
+import kr.syeyoung.dungeonsguide.features.GuiFeature;
+import kr.syeyoung.dungeonsguide.gui.MPanel;
+import kr.syeyoung.dungeonsguide.gui.elements.MButton;
+import kr.syeyoung.dungeonsguide.gui.elements.MToggleButton;
+import kr.syeyoung.dungeonsguide.utils.RenderUtils;
+import lombok.Getter;
+import lombok.Setter;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.renderer.GlStateManager;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL14;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MFeature extends MPanel {
+
+ @Getter
+ private final AbstractFeature feature;
+
+ private final List<MPanel> addons = new ArrayList<MPanel>();
+
+ @Getter @Setter
+ private Color hover;
+
+ private final RootConfigPanel panel;
+
+ public MFeature(final AbstractFeature abstractFeature, final RootConfigPanel panel) {
+ this.panel = panel;
+ this.feature = abstractFeature;
+
+ if (abstractFeature.isDisyllable()) {
+ final MToggleButton mStringSelectionButton = new MToggleButton();
+ mStringSelectionButton.setOnToggle(new Runnable() {
+ @Override
+ public void run() {
+ boolean selected = mStringSelectionButton.isEnabled();
+ feature.setEnabled(selected);
+ }
+ });
+ mStringSelectionButton.setBackground(RenderUtils.blendAlpha(0x141414, 0.07f));
+ addons.add(mStringSelectionButton);
+ mStringSelectionButton.setEnabled(feature.isEnabled());
+ mStringSelectionButton.setSize(new Dimension(40, 15));
+ add(mStringSelectionButton);
+ }
+ if (abstractFeature.getParameters().size() != 0) {
+ MButton button = new MButton();
+ button.setText("Edit");
+ button.setOnActionPerformed(new Runnable() {
+ @Override
+ public void run() {
+ panel.setCurrentPageAndPushHistory(abstractFeature.getEditRoute(panel));
+ }
+ });
+ button.setBackground(RenderUtils.blendAlpha(0x141414, 0.07f));
+ button.setClicked(RenderUtils.blendAlpha(0x141414, 0.17f));
+ button.setHover(RenderUtils.blendAlpha(0x141414, 0.17f));
+ addons.add(button);
+ button.setSize(new Dimension(50, 15));
+ add(button);
+ }
+ if (abstractFeature instanceof GuiFeature) {
+ MButton button = new MButton();
+ button.setText("Relocate");
+ button.setOnActionPerformed(new Runnable() {
+ @Override
+ public void run() {
+ Minecraft.getMinecraft().displayGuiScreen(new GuiGuiLocationConfig(Minecraft.getMinecraft().currentScreen, abstractFeature));
+ button.setIsclicked(false);
+ }
+ });
+ button.setBackground(RenderUtils.blendAlpha(0x141414, 0.07f));
+ button.setClicked(RenderUtils.blendAlpha(0x141414, 0.17f));
+ button.setHover(RenderUtils.blendAlpha(0x141414, 0.17f));
+ addons.add(button);
+ button.setSize(new Dimension(75, 15));
+ add(button);
+ }
+ }
+
+ @Override
+ public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
+
+ int border = RenderUtils.blendAlpha(0x141414, 0.12f);
+ if (!panel.getSearchWord().isEmpty() && (feature.getName().toLowerCase().contains(panel.getSearchWord()) || feature.getDescription().toLowerCase().contains(panel.getSearchWord()))) {
+ border = 0xFF02EE67;
+ }
+
+ Gui.drawRect(0,0,getBounds().width, getBounds().height,border);
+ Gui.drawRect(1,18,getBounds().width -1, getBounds().height-1, RenderUtils.blendAlpha(0x141414, 0.15f));
+ Gui.drawRect(1,1,getBounds().width-1, 18, RenderUtils.blendAlpha(0x141414, 0.12f));
+
+
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(5,5,0);
+ GlStateManager.scale(1.0,1.0,0);
+ GlStateManager.enableBlend();
+ GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ fr.drawString(feature.getName(), 0,0, 0xFFFFFFFF);
+ GlStateManager.popMatrix();
+
+ fr.drawSplitString(feature.getDescription(), 5, 23, getBounds().width -10, 0xFFBFBFBF);
+ }
+
+ @Override
+ public void resize(int parentWidth, int parentHeight) {
+ this.setSize(new Dimension(parentWidth, getBounds().height));
+ }
+
+ @Override
+ public Dimension getPreferredSize() {
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ int descriptionHeight = fr.listFormattedStringToWidth(feature.getDescription(), Math.max(100, getBounds().width - 10)).size() * fr.FONT_HEIGHT;
+
+ return new Dimension(100, descriptionHeight + 28);
+ }
+
+ @Override
+ public void onBoundsUpdate() {
+ int x = getBounds().width - 5;
+ for (MPanel panel : addons) {
+ panel.setBounds(new Rectangle(x - panel.getPreferredSize().width, 3, panel.getPreferredSize().width, 12));
+ x -= panel.getPreferredSize().width + 5;
+ }
+ }
+}