diff options
author | syeyoung <cyong06@naver.com> | 2021-08-01 23:43:10 +0900 |
---|---|---|
committer | syeyoung <cyong06@naver.com> | 2021-08-01 23:43:10 +0900 |
commit | d1c36c2412b98350f8336e38361e49b3655982d5 (patch) | |
tree | 34f2d6396f69840f623254b5c6e50c3563f5cfda /src/main/java/kr/syeyoung/dungeonsguide | |
parent | 16a4367663f5ed2a909804de6d319c97c9854ecc (diff) | |
download | Skyblock-Dungeons-Guide-d1c36c2412b98350f8336e38361e49b3655982d5.tar.gz Skyblock-Dungeons-Guide-d1c36c2412b98350f8336e38361e49b3655982d5.tar.bz2 Skyblock-Dungeons-Guide-d1c36c2412b98350f8336e38361e49b3655982d5.zip |
Too many changes to describe
Config gui overhaul.
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide')
45 files changed, 631 insertions, 804 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java b/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java index 28bc50bc..437c1689 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java @@ -22,7 +22,6 @@ import com.google.gson.JsonObject; import kr.syeyoung.dungeonsguide.DungeonsGuide; import kr.syeyoung.dungeonsguide.SkyblockStatus; import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.GuiConfigV2; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager; import kr.syeyoung.dungeonsguide.dungeon.DungeonContext; import kr.syeyoung.dungeonsguide.dungeon.MapProcessor; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/GuiGuiLocationConfig.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/GuiGuiLocationConfig.java index 645ba3a9..9f33536e 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/GuiGuiLocationConfig.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/GuiGuiLocationConfig.java @@ -18,7 +18,6 @@ package kr.syeyoung.dungeonsguide.config.guiconfig.location; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.PanelDelegate; import kr.syeyoung.dungeonsguide.features.AbstractFeature; import kr.syeyoung.dungeonsguide.features.FeatureRegistry; import kr.syeyoung.dungeonsguide.features.GuiFeature; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/PanelDelegate.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/PanelDelegate.java index 3ae0b2a8..4e776eef 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/PanelDelegate.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/PanelDelegate.java @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package kr.syeyoung.dungeonsguide.config.guiconfig.old; +package kr.syeyoung.dungeonsguide.config.guiconfig.location; import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig; import kr.syeyoung.dungeonsguide.config.guiconfig.location.Marker; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/ConfigPanelCreator.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/ConfigPanelCreator.java index 57db9864..76515e69 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/ConfigPanelCreator.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/ConfigPanelCreator.java @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package kr.syeyoung.dungeonsguide.config.guiconfig.old; +package kr.syeyoung.dungeonsguide.config.guiconfig.nyu; import com.google.common.base.Function; import com.google.common.base.Supplier; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/GuiConfigV2.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/GuiConfigV2.java index 94dec77b..267d9a5a 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/GuiConfigV2.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/GuiConfigV2.java @@ -18,20 +18,15 @@ package kr.syeyoung.dungeonsguide.config.guiconfig.nyu; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.ConfigPanelCreator; import kr.syeyoung.dungeonsguide.gui.MGui; -import kr.syeyoung.dungeonsguide.utils.cursor.EnumCursor; -import kr.syeyoung.dungeonsguide.utils.cursor.GLCursors; +import lombok.Getter; import net.minecraft.client.Minecraft; -import org.lwjgl.LWJGLException; -import org.lwjgl.input.Cursor; -import org.lwjgl.input.Mouse; import java.awt.*; -import java.io.IOException; public class GuiConfigV2 extends MGui { + @Getter private RootConfigPanel rootConfigPanel; public GuiConfigV2() { @@ -46,7 +41,13 @@ public class GuiConfigV2 extends MGui { super.initGui(); int dw = Minecraft.getMinecraft().displayWidth; int dh = Minecraft.getMinecraft().displayHeight; - rootConfigPanel.setBounds(new Rectangle((dw-1000)/2, (dh-800)/2, 1000,800)); - rootConfigPanel.setScale(2.0f); + rootConfigPanel.setBounds(new Rectangle((dw-1500)/2, (dh-800)/2, 1500,800)); + rootConfigPanel.setScale(2.0); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + super.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MCategory.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MCategory.java index be7dcfa6..cf57619f 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MCategory.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MCategory.java @@ -18,8 +18,9 @@ package kr.syeyoung.dungeonsguide.config.guiconfig.nyu; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.MFeature; +import kr.syeyoung.dungeonsguide.features.FeatureRegistry; import kr.syeyoung.dungeonsguide.gui.MPanel; +import kr.syeyoung.dungeonsguide.utils.RenderUtils; import kr.syeyoung.dungeonsguide.utils.cursor.EnumCursor; import lombok.Getter; import lombok.Setter; @@ -46,7 +47,9 @@ public class MCategory extends MPanel { @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { - Gui.drawRect(0,0,getBounds().width, getBounds().height,0xFF444444); + Gui.drawRect(0,0,getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.12f)); + Gui.drawRect(1,18,getBounds().width -1, getBounds().height-1, RenderUtils.blendAlpha(0x141414, 0.15f)); + Gui.drawRect(0,17,getBounds().width, 18,RenderUtils.blendAlpha(0x141414, 0.12f)); FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; @@ -60,18 +63,22 @@ public class MCategory extends MPanel { fr.drawString((lastAbsClip.contains(absMousex, absMousey) ? "§n" : "") + nestedCategory.categoryName(), 0,0, 0xFFFFFFFF); GlStateManager.popMatrix(); - fr.drawSplitString("NO DESC", 5, 23, getBounds().width -10, 0xFFBFBFBF); + fr.drawSplitString(FeatureRegistry.getCategoryDescription().getOrDefault(nestedCategory.categoryFull(), ""), 5, 23, getBounds().width -10, 0xFFBFBFBF); } @Override public Dimension getPreferredSize() { - return new Dimension(100, 17); + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + int descriptionHeight = fr.listFormattedStringToWidth(FeatureRegistry.getCategoryDescription().getOrDefault(nestedCategory.categoryFull(), ""), Math.max(100, getBounds().width - 10)).size() * fr.FONT_HEIGHT; + + return new Dimension(100, descriptionHeight + 28); } + @Override public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) { if (lastAbsClip.contains(absMouseX, absMouseY)) - rootConfigPanel.setCurrentPage(nestedCategory.categoryFull()); + rootConfigPanel.setCurrentPageAndPushHistory(nestedCategory.categoryFull()); } @Override diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MCategoryElement.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MCategoryElement.java index 3e7bba67..67087dd8 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MCategoryElement.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MCategoryElement.java @@ -46,14 +46,13 @@ public class MCategoryElement extends MPanel { @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { if (rootConfigPanel.getCurrentPage().equals(category)) { - GL11.glDisable(GL11.GL_SCISSOR_TEST); + clip(0,scissor.y, Minecraft.getMinecraft().displayWidth, scissor.height); Gui.drawRect(leftPad - offsetX, 0, getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.13f)); - GL11.glEnable(GL11.GL_SCISSOR_TEST); } else if (lastAbsClip.contains(absMousex, absMousey)) { - GL11.glDisable(GL11.GL_SCISSOR_TEST); + clip(0,scissor.y, Minecraft.getMinecraft().displayWidth, scissor.height); Gui.drawRect(leftPad - offsetX, 0, getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.09f)); - GL11.glEnable(GL11.GL_SCISSOR_TEST); } + clip(scissor.x, scissor.y, scissor.width, scissor.height); FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/MFeature.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MFeature.java index 922f992e..15b36216 100755..100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/MFeature.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MFeature.java @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package kr.syeyoung.dungeonsguide.config.guiconfig.old; +package kr.syeyoung.dungeonsguide.config.guiconfig.nyu; import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig; import kr.syeyoung.dungeonsguide.features.AbstractFeature; @@ -24,6 +24,7 @@ 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; @@ -34,8 +35,8 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL14; import java.awt.*; -import java.util.List; import java.util.ArrayList; +import java.util.List; public class MFeature extends MPanel { @@ -47,10 +48,10 @@ public class MFeature extends MPanel { @Getter @Setter private Color hover; - private final GuiConfig config; + private final RootConfigPanel panel; - public MFeature(final AbstractFeature abstractFeature, final GuiConfig config) { - this.config = config; + public MFeature(final AbstractFeature abstractFeature, final RootConfigPanel panel) { + this.panel = panel; this.feature = abstractFeature; if (abstractFeature.isDisyllable()) { @@ -62,9 +63,10 @@ public class MFeature extends MPanel { feature.setEnabled(selected); } }); + mStringSelectionButton.setBackground(RenderUtils.blendAlpha(0x141414, 0.07f)); addons.add(mStringSelectionButton); mStringSelectionButton.setEnabled(feature.isEnabled()); - mStringSelectionButton.setSize(new Dimension(30, 15)); + mStringSelectionButton.setSize(new Dimension(40, 15)); add(mStringSelectionButton); } if (abstractFeature.getParameters().size() != 0) { @@ -73,33 +75,40 @@ public class MFeature extends MPanel { button.setOnActionPerformed(new Runnable() { @Override public void run() { - config.getTabbedPane().setCurrentPage(abstractFeature.getEditRoute(config)); + 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("GUI"); + button.setText("Relocate"); button.setOnActionPerformed(new Runnable() { @Override public void run() { - Minecraft.getMinecraft().displayGuiScreen(new GuiGuiLocationConfig(config, abstractFeature)); + 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(50, 15)); + button.setSize(new Dimension(75, 15)); add(button); } } @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { - Gui.drawRect(0,0,getBounds().width, getBounds().height,0xFF444444); - Gui.drawRect(1,18,getBounds().width -1, getBounds().height-1, 0xFF545454); - Gui.drawRect(0,17,getBounds().width, 18,0xFF444444); + Gui.drawRect(0,0,getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.12f)); + Gui.drawRect(1,18,getBounds().width -1, getBounds().height-1, RenderUtils.blendAlpha(0x141414, 0.15f)); + Gui.drawRect(0,17,getBounds().width, 18,RenderUtils.blendAlpha(0x141414, 0.12f)); FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MFeatureEdit.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MFeatureEdit.java new file mode 100644 index 00000000..3256c408 --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MFeatureEdit.java @@ -0,0 +1,86 @@ +/* + * 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.nyu; + +import kr.syeyoung.dungeonsguide.features.AbstractFeature; +import kr.syeyoung.dungeonsguide.features.FeatureParameter; +import kr.syeyoung.dungeonsguide.gui.MPanel; +import kr.syeyoung.dungeonsguide.gui.elements.MButton; +import kr.syeyoung.dungeonsguide.gui.elements.MList; + +import java.awt.*; +import java.util.HashMap; +import java.util.Map; + +public class MFeatureEdit extends MPanel { + private MList list; + private MButton goBack; + private RootConfigPanel rootConfigPanel; + private AbstractFeature abstractFeature; + + private Map<String, MPanel> parameterEdits = new HashMap<>(); + + public MFeatureEdit(AbstractFeature abstractFeature, RootConfigPanel rootConfigPanel) { + this.abstractFeature = abstractFeature; + this.rootConfigPanel = rootConfigPanel; + list = new MList(); + list.setGap(5); + list.setDrawLine(false); + add(list); + + goBack = new MButton(); + goBack.setText("< Go Back"); + goBack.setOnActionPerformed(rootConfigPanel::goBack); + add(goBack); + } + + public void addParameterEdit(String name, MPanel paramEdit) { + parameterEdits.put(name, paramEdit); + list.add(paramEdit); + } + public MPanel removeParameterEdit(String name) { + MPanel panel = parameterEdits.remove(name); + list.remove(panel); + return panel; + } + + @Override + public void resize(int parentWidth, int parentHeight) { + super.resize(parentWidth, parentHeight); + setBounds(new Rectangle(0,0,parentWidth,parentHeight)); + Dimension prefSize = getPreferredSize(); + int hei = prefSize.height; + setBounds(new Rectangle(0,0,parentWidth,hei)); + } + + @Override + public void setBounds(Rectangle bounds) { + super.setBounds(bounds); + goBack.setBounds(new Rectangle(5,5,75,15)); + + list.setBounds(new Rectangle(5,25,bounds.width - 10, bounds.height - 10)); + list.realignChildren(); + } + + @Override + public Dimension getPreferredSize() { + Dimension listPref = list.getPreferredSize(); + return new Dimension(listPref.width + 10, listPref.height + 30); + } +} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MPanelCategory.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MPanelCategory.java index 5b6d9bbd..5df29c3b 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MPanelCategory.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MPanelCategory.java @@ -18,7 +18,6 @@ package kr.syeyoung.dungeonsguide.config.guiconfig.nyu; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.MFeature; import kr.syeyoung.dungeonsguide.features.AbstractFeature; import kr.syeyoung.dungeonsguide.features.FeatureRegistry; import kr.syeyoung.dungeonsguide.gui.MPanel; @@ -49,7 +48,7 @@ public class MPanelCategory extends MPanel { String actualCategory = nestedCategory.categoryFull().substring(5); if (FeatureRegistry.getFeaturesByCategory().containsKey(actualCategory)) for (AbstractFeature abstractFeature : FeatureRegistry.getFeaturesByCategory().get(actualCategory)) { - MFeature mFeature = new MFeature(abstractFeature, null); + MFeature mFeature = new MFeature(abstractFeature, rootConfigPanel); list.add(mFeature); mFeature.setHover(new Color(94, 94, 94, 255)); } @@ -60,10 +59,10 @@ public class MPanelCategory extends MPanel { @Override public void resize(int parentWidth, int parentHeight) { super.resize(parentWidth, parentHeight); - Dimension prefSize = list.getPreferredSize(); - int wid = Math.max(prefSize.width + 10, parentWidth); - int hei = prefSize.height + 10; - setBounds(new Rectangle(0,0,wid,hei)); + setBounds(new Rectangle(0,0,parentWidth,parentHeight)); + Dimension prefSize = getPreferredSize(); + int hei = prefSize.height; + setBounds(new Rectangle(0,0,parentWidth,hei)); } @Override diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MParameterEdit.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MParameterEdit.java new file mode 100644 index 00000000..341705ee --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/MParameterEdit.java @@ -0,0 +1,156 @@ +/* + * 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.nyu; + +import kr.syeyoung.dungeonsguide.config.types.AColor; +import kr.syeyoung.dungeonsguide.features.AbstractFeature; +import kr.syeyoung.dungeonsguide.features.FeatureParameter; +import kr.syeyoung.dungeonsguide.features.FeatureRegistry; +import kr.syeyoung.dungeonsguide.gui.MPanel; +import kr.syeyoung.dungeonsguide.gui.elements.*; +import kr.syeyoung.dungeonsguide.roomedit.Parameter; +import kr.syeyoung.dungeonsguide.roomedit.valueedit.ValueEdit; +import kr.syeyoung.dungeonsguide.roomedit.valueedit.ValueEditCreator; +import kr.syeyoung.dungeonsguide.roomedit.valueedit.ValueEditRegistry; +import kr.syeyoung.dungeonsguide.utils.RenderUtils; +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.*; + +public class MParameterEdit extends MPanel { + private AbstractFeature abstractFeature; + private FeatureParameter featureParameter; + private RootConfigPanel rootConfigPanel; + private MPanel valueEditHolder; + private MPanel valueEdit; + + public MParameterEdit(AbstractFeature abstractFeature, FeatureParameter parameter, RootConfigPanel rootConfigPanel) { + this.abstractFeature = abstractFeature; + this.featureParameter = parameter; + this.rootConfigPanel = rootConfigPanel; + + if (parameter.getValue_type().equals("string")) { + valueEdit = new MTextField() { + @Override + public void edit(String str) { + parameter.setValue(str); + } + }; + ((MTextField)valueEdit).setText((String) parameter.getValue()); + } else if (parameter.getValue_type().equals("integer")) { + valueEdit = new MIntegerSelectionButton((Integer) parameter.getValue()); + ((MIntegerSelectionButton)valueEdit).setOnUpdate(() -> { + parameter.setValue(((MIntegerSelectionButton) valueEdit).getData()); + }); + } else if (parameter.getValue_type().equals("float")) { + valueEdit = new MFloatSelectionButton((Float) parameter.getValue()); + ((MFloatSelectionButton)valueEdit).setOnUpdate(() -> { + parameter.setValue(((MFloatSelectionButton) valueEdit).getData()); + }); + } else if (parameter.getValue_type().equals("acolor")) { + valueEdit = new MEditableAColor(); + ((MEditableAColor)valueEdit).setColor((AColor) parameter.getValue()); + ((MEditableAColor)valueEdit).setEnableEdit(true); + ((MEditableAColor)valueEdit).setOnUpdate(() -> { + parameter.setValue(((MEditableAColor) valueEdit).getColor()); + }); + } else if (parameter.getValue_type().equals("color")) { + valueEdit = new MEditableAColor(); + ((MEditableAColor)valueEdit).setColor(new AColor(((Color) parameter.getValue()).getRGB(), true)); + ((MEditableAColor)valueEdit).setEnableEdit(true); + ((MEditableAColor)valueEdit).setOnUpdate(() -> { + parameter.setValue(((MEditableAColor) valueEdit).getColor()); + }); + } else if (parameter.getValue_type().equals("boolean")) { + valueEdit = new MToggleButton(); + ((MToggleButton)valueEdit).setEnabled((Boolean) parameter.getValue()); + ((MToggleButton)valueEdit).setOnToggle(() -> { + parameter.setValue(((MToggleButton) valueEdit).isEnabled()); + }); + } else { + valueEdit = new MLabel(); + ((MLabel)valueEdit).setText("????"); + } + + + valueEditHolder = new MPanel() { + @Override + public void setBounds(Rectangle bounds) { + super.setBounds(bounds); + Dimension dimension = valueEdit.getPreferredSize(); + if (dimension.width <= 0) dimension.width = bounds.width/2; + if (dimension.height <= 0) dimension.height = bounds.height/2; + valueEdit.setBounds(new Rectangle((bounds.width - dimension.width)/2,(bounds.height - dimension.height)/2,dimension.width, dimension.height)); + } + }; + add(valueEditHolder); + valueEditHolder.add(valueEdit); + } + public MParameterEdit(AbstractFeature abstractFeature, FeatureParameter parameter, RootConfigPanel rootConfigPanel, MPanel valueEdit) { + this.abstractFeature = abstractFeature; + this.featureParameter = parameter; + this.rootConfigPanel = rootConfigPanel; + + + valueEditHolder = new MPanel() { + @Override + public void setBounds(Rectangle bounds) { + super.setBounds(bounds); + Dimension dimension = valueEdit.getPreferredSize(); + if (dimension.width <= 0) dimension.width = bounds.width/2; + if (dimension.height <= 0) dimension.height = bounds.height/2; + valueEdit.setBounds(new Rectangle((bounds.width - dimension.width)/2,(bounds.height - dimension.height)/2,dimension.width, dimension.height)); + } + }; + add(valueEditHolder); + valueEditHolder.add(valueEdit); + } + + @Override + public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { + Gui.drawRect(0,0,getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.12f)); + Gui.drawRect(2*bounds.width / 3,1,getBounds().width -1, getBounds().height-1, RenderUtils.blendAlpha(0x141414, 0.15f)); + Gui.drawRect(4, 15,2*bounds.width / 3-5, 16, RenderUtils.blendAlpha(0x141414, 0.3f)); + + + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + fr.drawString(featureParameter.getName(), 5,5, 0xFFFFFFFF); + fr.drawSplitString(featureParameter.getDescription(), 5,18, 2*bounds.width /3-10, 0xFFAAAAAA); + + } + + @Override + public Dimension getPreferredSize() { + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + int descriptionHeight = fr.listFormattedStringToWidth(FeatureRegistry.getCategoryDescription().getOrDefault(featureParameter.getDescription(), ""), Math.max(100, getBounds().width - 10)).size() * fr.FONT_HEIGHT; + + return new Dimension(100, Math.max(Math.max(30, descriptionHeight + 23), valueEditHolder.getPreferredSize().height)); + } + + @Override + public void setBounds(Rectangle bounds) { + super.setBounds(bounds); + valueEditHolder.setBounds(new Rectangle(2*bounds.width / 3, 0, bounds.width / 3, bounds.height)); + } +} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/RootConfigPanel.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/RootConfigPanel.java index e156e849..e2b97b7f 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/RootConfigPanel.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/nyu/RootConfigPanel.java @@ -20,8 +20,6 @@ package kr.syeyoung.dungeonsguide.config.guiconfig.nyu; import com.google.common.base.Function; import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.ConfigPanelCreator; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; import kr.syeyoung.dungeonsguide.features.AbstractFeature; import kr.syeyoung.dungeonsguide.features.FeatureRegistry; import kr.syeyoung.dungeonsguide.gui.MPanel; @@ -30,15 +28,15 @@ 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 java.awt.*; import java.util.HashMap; -import java.util.List; import java.util.Map; +import java.util.Stack; public class RootConfigPanel extends MPanelScaledGUI { - private MScrollablePanel navigationScroll; private MList navigation = new MList(); @@ -55,14 +53,38 @@ public class RootConfigPanel extends MPanelScaledGUI { private GuiConfigV2 gui; + private long lastPageSet = System.currentTimeMillis(); + + private MTextField search; + private MButton guiRelocate; + + private final Stack<String> history = new Stack<String>(); + public RootConfigPanel(GuiConfigV2 guiConfigV2) { this.gui = guiConfigV2; + search = new MTextField() { + @Override + public void edit(String str) { + } + }; + search.setPlaceHolder("Search..."); + add(search); + guiRelocate = new MButton(); + guiRelocate.setText("Edit Gui Locations"); + guiRelocate.setOnActionPerformed(() -> { + Minecraft.getMinecraft().displayGuiScreen(new GuiGuiLocationConfig(gui, null)); + guiRelocate.setIsclicked(false); + }); + guiRelocate.setBorder(RenderUtils.blendTwoColors(0xFF141414,0x7702EE67)); + add(guiRelocate); + navigationScroll = new MScrollablePanel(1); navigationScroll.setHideScrollBarWhenNotNecessary(false); + + add(navigationScroll); navigationScroll.add(navigation); - navigationScroll.add(new MSpacer(0,0,1,1)); contentScroll = new MScrollablePanel(3); contentScroll.setHideScrollBarWhenNotNecessary(true); @@ -72,6 +94,7 @@ public class RootConfigPanel extends MPanelScaledGUI { navigation.setGap(0); navigation.setDrawLine(false); + rePlaceElements(); } @@ -91,23 +114,18 @@ public class RootConfigPanel extends MPanelScaledGUI { for (NestedCategory value : root.children().values()) { setupNavigationRecursive(value, navigation, 0, 17); } - - MCategoryElement current = new MCategoryElement("GUI Relocate",() -> { - Minecraft.getMinecraft().displayGuiScreen(new GuiGuiLocationConfig(gui, null)); - }, 17,17, this); - navigation.add(current); } private void setupNavigationRecursive(NestedCategory nestedCategory, MPanel parent, int depth, int offset) { ConfigPanelCreator.map.put(nestedCategory.categoryFull(), () -> new MPanelCategory(nestedCategory, this)); if (nestedCategory.children().size() == 0) { MCategoryElement current = new MCategoryElement(nestedCategory.categoryFull(),() -> { - setCurrentPage(nestedCategory.categoryFull()); + setCurrentPageAndPushHistory(nestedCategory.categoryFull()); }, 13 * depth + 17, offset, this); parent.add(current); } else { MCategoryElement current = new MCategoryElement(nestedCategory.categoryFull(),() -> { - setCurrentPage(nestedCategory.categoryFull()); + setCurrentPageAndPushHistory(nestedCategory.categoryFull()); }, 3,offset, this); MCollapsable mCollapsable = new MCollapsable(current, this::rePlaceElements); mCollapsable.setLeftPad(offset-13); @@ -123,9 +141,19 @@ public class RootConfigPanel extends MPanelScaledGUI { } - public void setCurrentPage(String currentPage) { + public void setCurrentPageAndPushHistory(String currentPage) { + if (!this.currentPage.equals(currentPage)) + history.push(this.currentPage); this.currentPage = currentPage; + setupPage(); + } + public void goBack() { + if (history.size() == 0) return; + this.currentPage = history.pop(); + setupPage(); + } + private void setupPage() { contentScroll.getContentArea().getChildComponents().forEach(contentScroll.getContentArea()::remove); if (!pages.containsKey(currentPage)) { MPanel page = pageGenerator.apply(currentPage); @@ -139,9 +167,21 @@ public class RootConfigPanel extends MPanelScaledGUI { @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { Dimension effectiveDim = getEffectiveDimension(); - Gui.drawRect(0,0, (int) (effectiveDim.width), (int) (effectiveDim.height), RenderUtils.blendAlpha(0, 0.0f)); - Gui.drawRect(1,1, (int) (effectiveDim.width)-1, (int) (effectiveDim.height) - 1, RenderUtils.blendAlpha(0x141414, 0.00f)); - Gui.drawRect(1,1, (int) (effectiveDim.width)-1, 25, RenderUtils.blendAlpha(0x0, 0.20f)); + Gui.drawRect(0,0, (int) (effectiveDim.width), (int) (effectiveDim.height), RenderUtils.blendAlpha(0x141414, 0.00f)); + Gui.drawRect(0,0, (int) (effectiveDim.width), 25, RenderUtils.blendAlpha(0x0, 0.20f)); +// Gui.drawRect(navigationScroll.getBounds().x + navigationScroll.getBounds().width - 10, 25, navigationScroll.getBounds().x + navigationScroll.getBounds().width , 50, RenderUtils.blendAlpha(0xFF141414, 0.04f)); + Gui.drawRect(0, 25,navigationScroll.getBounds().x + navigationScroll.getBounds().width , 50, RenderUtils.blendAlpha(0xFF141414, 0.08f)); + + + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + fr.drawString("DungeonsGuide by syeyoung", (effectiveDim.width - fr.getStringWidth("DungeonsGuide By syeyoung"))/2, (25 - fr.FONT_HEIGHT)/2, 0xFF02EE67); + } + + @Override + public void render0(double parentScale, Point parentPoint, Rectangle parentClip, int absMousex0, int absMousey0, int relMousex0, int relMousey0, float partialTicks) { + super.render0(parentScale, parentPoint, parentClip, absMousex0, absMousey0, relMousex0, relMousey0, partialTicks); + Dimension effectiveDim = getEffectiveDimension(); + Gui.drawRect(0,24, (int) (Double.min(1, (System.currentTimeMillis() - lastPageSet)/1000.0) * effectiveDim.width), 25, 0xFF02EE67); } @Override @@ -152,12 +192,17 @@ public class RootConfigPanel extends MPanelScaledGUI { private void rePlaceElements() { Dimension effectiveDim = getEffectiveDimension(); + navigation.setBounds(new Rectangle(new Point(0,1), new Dimension(Math.max(100, Math.max(navigation.getPreferredSize().width, navigationScroll.getBounds().width-10)), navigation.getPreferredSize().height))); navigation.realignChildren(); + navigationScroll.evalulateContentArea(); Rectangle navBound; - navigationScroll.setBounds(navBound = new Rectangle(1,25, navigation.getBounds().width+10, effectiveDim.height-24)); + navigationScroll.setBounds(navBound = new Rectangle(0,50, navigation.getBounds().width+10, effectiveDim.height-50)); + contentScroll.setBounds(new Rectangle(navBound.x + navBound.width, 25, effectiveDim.width - navBound.x - navBound.width, effectiveDim.height-25)); + + search.setBounds(new Rectangle(5,30,navBound.x + navBound.width - 10,15)); - contentScroll.setBounds(new Rectangle(navBound.x + navBound.width + 1, 25, effectiveDim.width - navBound.x - navBound.width - 2, effectiveDim.height -26)); + guiRelocate.setBounds(new Rectangle(5,5,100,15)); } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/FeatureEditPane.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/FeatureEditPane.java deleted file mode 100755 index 2109c1a7..00000000 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/FeatureEditPane.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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.old; - -import kr.syeyoung.dungeonsguide.features.AbstractFeature; -import kr.syeyoung.dungeonsguide.gui.MPanel; -import kr.syeyoung.dungeonsguide.gui.elements.*; -import net.minecraft.client.gui.ScaledResolution; - -import java.awt.*; -import java.util.*; -import java.util.List; - -public class FeatureEditPane extends MPanel { - private final List<AbstractFeature> features; - - private final List<MFeature> le = new ArrayList<MFeature>(); - - private final GuiConfig config; - - private MTextField textField; - private String search = ""; - - public FeatureEditPane(List<AbstractFeature> features, GuiConfig config) { - this.features = features; - this.config = config; - buildElements(); - - } - - - public void buildElements() { - for (AbstractFeature feature : features) { - MFeature mFeature = new MFeature(feature, config); - mFeature.setHover(new Color(94, 94, 94, 255)); - le.add(mFeature); - add(mFeature); - } - - textField = new MTextField() { - @Override - public void edit(String str) { - offsetY = 0; - search = str; - } - }; - textField.setText(""); - textField.setBounds(new Rectangle(getBounds().width - 200, 0, 200, 20)); - add(textField); - } - @Override - public void onBoundsUpdate() { - for (MPanel panel :getChildComponents()){ - panel.setSize(new Dimension(getBounds().width, panel.getPreferredSize().height)); - } - textField.setBounds(new Rectangle(getBounds().width - 200, 0, 200, 20)); - } - @Override - public void resize(int parentWidth, int parentHeight) { - this.setBounds(new Rectangle(5,1,parentWidth-10,parentHeight-2)); - } - - @Override - public List<MPanel> getChildComponents() { - List<MPanel> comp = new ArrayList<MPanel>(); - comp.add(textField); - for (MFeature feature:le) { - if (feature.getFeature().getName().toLowerCase().contains(search.toLowerCase())) - comp.add(feature); - } - return comp; - } - - private int offsetY = 0; - @Override - public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { - int heights = 0; - for (MPanel panel:getChildComponents()) { - panel.setPosition(new Point(panel.getBounds().x, -offsetY + heights)); - heights += panel.getBounds().height + 5; - } - } - - - - @Override - public void mouseScrolled(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0, int scrollAmount) { - if (scrollAmount > 0) offsetY -= 20; - else if (scrollAmount < 0) offsetY += 20; - if (offsetY < 0) offsetY = 0; - } -} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/GuiConfig.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/GuiConfig.java deleted file mode 100755 index 822c5e2f..00000000 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/GuiConfig.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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.old; - -import com.google.common.base.Supplier; -import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig; -import kr.syeyoung.dungeonsguide.features.AbstractFeature; -import kr.syeyoung.dungeonsguide.features.FeatureRegistry; -import kr.syeyoung.dungeonsguide.gui.MGui; -import kr.syeyoung.dungeonsguide.gui.MPanel; -import kr.syeyoung.dungeonsguide.gui.elements.MNavigatingPane; -import kr.syeyoung.dungeonsguide.gui.elements.MPanelScaledGUI; -import lombok.Getter; -import net.minecraft.client.Minecraft; - -import java.awt.*; -import java.util.List; -import java.util.Map; -import java.util.Stack; -import java.util.stream.Collectors; - -public class GuiConfig extends MGui { - - - @Getter - private final MNavigatingPane tabbedPane; - - private final Stack<String> history = new Stack(); - - private MPanelScaledGUI panelScaledGUI; - public GuiConfig() { - - panelScaledGUI = new MPanelScaledGUI(); - getMainPanel().add(panelScaledGUI); - MNavigatingPane tabbedPane = new MNavigatingPane(); - panelScaledGUI.add(tabbedPane); - tabbedPane.setBackground2(new Color(38, 38, 38, 255)); - - tabbedPane.setPageGenerator(ConfigPanelCreator.INSTANCE); - - tabbedPane.addBookmarkRunnable("GUI Relocate", new Runnable() { - @Override - public void run() { - Minecraft.getMinecraft().displayGuiScreen(new GuiGuiLocationConfig(GuiConfig.this, null)); - } - }); - - for (final Map.Entry<String, List<AbstractFeature>> cate: FeatureRegistry.getFeaturesByCategory().entrySet()) - if (!cate.getKey().equals("hidden")) { - tabbedPane.addBookmark(cate.getKey(), "base." + cate.getKey()); - - ConfigPanelCreator.map.put("base." + cate.getKey(), new Supplier<MPanel>() { - @Override - public MPanel get() { - return new FeatureEditPane(cate.getValue(), GuiConfig.this); - } - }); - } - tabbedPane.addBookmark("All", "base.all"); - - ConfigPanelCreator.map.put("base.all", new Supplier<MPanel>() { - @Override - public MPanel get() { - return new FeatureEditPane(FeatureRegistry.getFeatureList().stream().filter( a-> !a.getCategory().equals("hidden")).collect(Collectors.toList()), GuiConfig.this); - } - }); - this.tabbedPane = tabbedPane; - } - - @Override - public void initGui() { - super.initGui(); - panelScaledGUI.setBounds(new Rectangle(Math.min((Minecraft.getMinecraft().displayWidth - 1000) / 2, Minecraft.getMinecraft().displayWidth), Math.min((Minecraft.getMinecraft().displayHeight - 700) / 2, Minecraft.getMinecraft().displayHeight),1000,700)); - panelScaledGUI.setScale(1.0); - } -} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/GuiParameterValueEdit.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/GuiParameterValueEdit.java deleted file mode 100755 index b759ead9..00000000 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/GuiParameterValueEdit.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * 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.old; - -import kr.syeyoung.dungeonsguide.gui.MGui; -import kr.syeyoung.dungeonsguide.gui.MPanel; -import kr.syeyoung.dungeonsguide.roomedit.Parameter; -import kr.syeyoung.dungeonsguide.gui.elements.MButton; -import kr.syeyoung.dungeonsguide.gui.elements.MLabel; -import kr.syeyoung.dungeonsguide.roomedit.valueedit.ValueEdit; -import kr.syeyoung.dungeonsguide.roomedit.valueedit.ValueEditCreator; -import kr.syeyoung.dungeonsguide.roomedit.valueedit.ValueEditRegistry; -import lombok.Getter; -import lombok.Setter; -import net.minecraft.client.Minecraft; - -import java.awt.*; - -public class GuiParameterValueEdit extends MGui { - - - private MPanel currentValueEdit; - - private MButton save; - - @Getter - private ValueEdit valueEdit; - - private Object editingObj; - - @Getter - @Setter - private Runnable onUpdate; - @Getter - private Parameter parameter; - - public GuiParameterValueEdit(final Object object, final GuiConfig prev) { - try { - this.editingObj = object; - getMainPanel().setBackgroundColor(new Color(17, 17, 17, 179)); - { - currentValueEdit = new MPanel() { - @Override - public void resize(int parentWidth, int parentHeight) { - setBounds(new Rectangle(5, 5, parentWidth-10, parentHeight - 25)); - } - }; - getMainPanel().add(currentValueEdit); - } - { - save = new MButton() { - @Override - public void resize(int parentWidth, int parentHeight) { - setBounds(new Rectangle(0, parentHeight - 20, parentWidth, 20)); - } - }; - save.setText("Go back"); - save.setBackgroundColor(Color.green); - save.setOnActionPerformed(new Runnable() { - @Override - public void run() { - onUpdate.run(); - Minecraft.getMinecraft().displayGuiScreen(prev); - } - }); - getMainPanel().add(save); - } - updateClassSelection(); - } catch (Exception e){} - } - - public void updateClassSelection() { - currentValueEdit.getChildComponents().clear(); - - ValueEditCreator valueEditCreator = ValueEditRegistry.getValueEditMap(editingObj == null ?"null":editingObj.getClass().getName()); - MPanel valueEdit = (MPanel) valueEditCreator.createValueEdit(parameter= new Parameter("", editingObj, editingObj)); - if (valueEdit == null) { - MLabel valueEdit2 = new MLabel() { - @Override - public void resize(int parentWidth, int parentHeight) { - setBounds(new Rectangle(0, 0, parentWidth,20)); - } - }; - valueEdit2.setText("No Value Edit"); - valueEdit2.setBounds(new Rectangle(0,0,150,20)); - valueEdit = valueEdit2; - this.valueEdit = null; - } else{ - this.valueEdit = (ValueEdit) valueEdit; - } - valueEdit.resize0(currentValueEdit.getBounds().width, currentValueEdit.getBounds().height); - currentValueEdit.add(valueEdit); - } - @Override - public void initGui() { - super.initGui(); - // update bounds - getMainPanel().setBounds(new Rectangle(10, Math.min((Minecraft.getMinecraft().displayHeight - 300) / 2, Minecraft.getMinecraft().displayHeight),200,300)); - save.setBounds(new Rectangle(0 ,getMainPanel().getBounds().height - 20, getMainPanel().getBounds().width, 20)); - } -} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/MParameter.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/MParameter.java deleted file mode 100755 index 49db94a8..00000000 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/MParameter.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * 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.old; - -import kr.syeyoung.dungeonsguide.config.types.AColor; -import kr.syeyoung.dungeonsguide.features.AbstractFeature; -import kr.syeyoung.dungeonsguide.features.FeatureParameter; -import kr.syeyoung.dungeonsguide.gui.MPanel; -import kr.syeyoung.dungeonsguide.gui.elements.MEditableAColor; -import kr.syeyoung.dungeonsguide.gui.elements.MToggleButton; -import kr.syeyoung.dungeonsguide.roomedit.Parameter; -import kr.syeyoung.dungeonsguide.gui.elements.MButton; -import kr.syeyoung.dungeonsguide.gui.elements.MLabel; -import lombok.Getter; -import lombok.Setter; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; - -import java.awt.*; -import java.util.ArrayList; -import java.util.List; - -public class MParameter extends MPanel { - private final MLabel label; - - @Getter - private final AbstractFeature feature; - @Getter - private final FeatureParameter parameter; - - private final List<MPanel> addons = new ArrayList<MPanel>(); - - @Getter @Setter - private Color hover; - - private PanelDefaultParameterConfig config; - - private final MLabel label2; - public MParameter(AbstractFeature abstractFeature, final FeatureParameter parameter, final GuiConfig config2) { - this.config = config; - this.parameter = parameter; - this.feature = abstractFeature; - - this.add(this.label = new MLabel()); - this.label.setText(parameter.getName()); - - { - if (parameter.getValue_type().equalsIgnoreCase("boolean")) { - final MToggleButton button = new MToggleButton(); - button.setOnToggle(new Runnable() { - @Override - public void run() { - parameter.setValue(button.isEnabled()); - label2.setText(parameter.getValue().toString()); - } - }); - button.setEnabled((Boolean) parameter.getValue()); - addons.add(button); - add(button); - } else if (parameter.getValue_type().equalsIgnoreCase("acolor")) { - final MEditableAColor button = new MEditableAColor(); - button.setEnableEdit(true); - button.setOnUpdate(new Runnable() { - @Override - public void run() { - parameter.setValue(button.getColor()); - label2.setText(parameter.getValue().toString()); - } - }); - button.setColor((AColor) parameter.getValue()); - addons.add(button); - add(button); - } else { - MButton button = new MButton(); - button.setText("Edit"); - button.setOnActionPerformed(new Runnable() { - @Override - public void run() { - final GuiParameterValueEdit guiParameterValueEdit = new GuiParameterValueEdit(parameter.getValue(), config2); - guiParameterValueEdit.setOnUpdate(new Runnable() { - @Override - public void run() { - Parameter parameter1 = guiParameterValueEdit.getParameter(); - parameter.setValue(parameter1.getNewData()); - label2.setText(parameter.getValue().toString()); - } - }); - Minecraft.getMinecraft().displayGuiScreen(guiParameterValueEdit); - } - }); - addons.add(button); - add(button); - } - } - { - MLabel button = new MLabel(); - button.setText(parameter.getValue().toString()); - addons.add(button); - add(button); - label2 = button; - } - setSize(new Dimension(100,20)); - } - - @Override - public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { - if (hover != null && new Rectangle(new Point(0,0),getBounds().getSize()).contains(relMousex0, relMousey0)) { - Gui.drawRect(0,0,getBounds().width, getBounds().height, hover.getRGB()); - } - } - - @Override - public void resize(int parentWidth, int parentHeight) { - this.setSize(new Dimension(parentWidth, getBounds().height)); - } - - @Override - public void onBoundsUpdate() { - int x = getBounds().width - 50; - for (MPanel panel : addons) { - panel.setBounds(new Rectangle(x, 3, 50, getBounds().height - 6)); - } - label2.setBounds(new Rectangle(x/2,0,x/2,getBounds().height)); - label.setBounds(new Rectangle(0,0,x/2, getBounds().height)); - } -} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/PanelDefaultParameterConfig.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/PanelDefaultParameterConfig.java deleted file mode 100755 index 9f8dafc4..00000000 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/old/PanelDefaultParameterConfig.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * 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.old; - -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.MParameter; -import kr.syeyoung.dungeonsguide.features.AbstractFeature; -import kr.syeyoung.dungeonsguide.features.FeatureParameter; -import kr.syeyoung.dungeonsguide.gui.MPanel; -import kr.syeyoung.dungeonsguide.gui.elements.MTooltip; -import kr.syeyoung.dungeonsguide.gui.elements.MTooltipText; - -import java.util.List; -import java.awt.*; -import java.util.Arrays; -import java.util.Set; - -public class PanelDefaultParameterConfig extends MPanel { - - private AbstractFeature feature; - - @Override - public void onBoundsUpdate() { - for (MPanel childComponent : getChildComponents()) { - childComponent.setSize(new Dimension(getBounds().width - 10, childComponent.getSize().height)); - } - } - - @Override - public void resize(int parentWidth, int parentHeight) { - this.setBounds(new Rectangle(0,0,parentWidth, parentHeight)); - } - - private final GuiConfig config; - public PanelDefaultParameterConfig(final GuiConfig config, AbstractFeature feature, List<MPanel> pre, Set<String> ignore) { - this.config = config; - for (MPanel mPanel : pre) { - add(mPanel); - } - for (FeatureParameter parameter: feature.getParameters()) { - if (ignore.contains(parameter.getKey())) continue; - add(new MParameter(feature, parameter, config)); - } - setBackgroundColor(new Color(38, 38, 38, 255)); - } - - - MPanel within; - MTooltip mTooltip; - MParameter lastWithin; - @Override - public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { - int heights = 0; - within = null; - for (MPanel panel:getChildComponents()) { - panel.setPosition(new Point(5, -offsetY + heights + 5)); - heights += panel.getBounds().height; - - if (panel.getBounds().contains(relMousex0,relMousey0)) within = panel; - } - if (within instanceof MParameter) { - FeatureParameter feature = ((MParameter) within).getParameter(); - if (lastWithin != within) { - if (mTooltip != null) mTooltip.close(); - mTooltip = new MTooltipText(Arrays.asList(feature.getDescription().split("\n"))); - mTooltip.open(this); - } - } else { - if (mTooltip != null) { - mTooltip.close(); - mTooltip = null; - } - } - } - - - public int offsetY = 0; - - @Override - public void mouseScrolled(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0, int scrollAmount) { - for (MPanel childComponent : getChildComponents()) { - if (!(childComponent instanceof MParameter) && childComponent.getBounds().contains(relMouseX0, relMouseY0)) return; - } - if (scrollAmount > 0) offsetY -= 20; - else if (scrollAmount < 0) offsetY += 20; - if (offsetY < 0) offsetY = 0; - } - -} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/AbstractFeature.java b/src/main/java/kr/syeyoung/dungeonsguide/features/AbstractFeature.java index 7b2d5ba0..c71639cd 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/AbstractFeature.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/AbstractFeature.java @@ -21,9 +21,7 @@ package kr.syeyoung.dungeonsguide.features; import com.google.common.base.Supplier; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.ConfigPanelCreator; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.PanelDefaultParameterConfig; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.*; import kr.syeyoung.dungeonsguide.config.types.TypeConverter; import kr.syeyoung.dungeonsguide.config.types.TypeConverterRegistry; import kr.syeyoung.dungeonsguide.gui.MPanel; @@ -84,11 +82,15 @@ public abstract class AbstractFeature { return object; } - public String getEditRoute(final GuiConfig config) { + public String getEditRoute(RootConfigPanel rootConfigPanel) { ConfigPanelCreator.map.put("base." + key , new Supplier<MPanel>() { @Override public MPanel get() { - return new PanelDefaultParameterConfig(config, AbstractFeature.this, Collections.emptyList(), Collections.emptySet()); + MFeatureEdit featureEdit = new MFeatureEdit(AbstractFeature.this, rootConfigPanel); + for (FeatureParameter parameter: getParameters()) { + featureEdit.addParameterEdit(parameter.getKey(), new MParameterEdit(AbstractFeature.this, parameter, rootConfigPanel)); + } + return featureEdit; } }); return "base." + key ; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java b/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java index b1db6d2d..bf0d8961 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java @@ -51,6 +51,8 @@ public class FeatureRegistry { private static final Map<String, AbstractFeature> featureByKey = new HashMap<String, AbstractFeature>(); @Getter private static final Map<String, List<AbstractFeature>> featuresByCategory = new HashMap<String, List<AbstractFeature>>(); + @Getter + private static final Map<String, String> categoryDescription = new HashMap<>(); public static AbstractFeature getFeatureByKey(String key) { return featureByKey.get(key); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java b/src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java index 4c60c090..396d244d 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java @@ -19,7 +19,7 @@ package kr.syeyoung.dungeonsguide.features; import com.google.gson.JsonObject; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.GuiConfigV2; import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig; import kr.syeyoung.dungeonsguide.config.types.GUIRectangle; import kr.syeyoung.dungeonsguide.config.types.TypeConverterRegistry; @@ -135,11 +135,11 @@ public abstract class GuiFeature extends AbstractFeature implements ScreenRender setOnActionPerformed(() -> { GuiScreen guiScreen = guiGuiLocationConfig.getBefore(); if (guiScreen == null) { - guiScreen = new GuiConfig(); + guiScreen = new GuiConfigV2(); } Minecraft.getMinecraft().displayGuiScreen(guiScreen); - if (guiScreen instanceof GuiConfig) { - ((GuiConfig) guiScreen).getTabbedPane().setCurrentPage(getEditRoute((GuiConfig) guiScreen)); + if (guiScreen instanceof GuiConfigV2) { + ((GuiConfigV2) guiScreen).getRootConfigPanel().setCurrentPageAndPushHistory(getEditRoute(((GuiConfigV2) guiScreen).getRootConfigPanel())); } }); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureWarningOnPortal.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureWarningOnPortal.java index 1711f955..8e585a0b 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureWarningOnPortal.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureWarningOnPortal.java @@ -21,11 +21,13 @@ package kr.syeyoung.dungeonsguide.features.impl.boss; import com.google.common.base.Supplier; import kr.syeyoung.dungeonsguide.DungeonsGuide; import kr.syeyoung.dungeonsguide.SkyblockStatus; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.ConfigPanelCreator; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.PanelDefaultParameterConfig; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.ConfigPanelCreator; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.MFeatureEdit; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.MParameterEdit; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.RootConfigPanel; import kr.syeyoung.dungeonsguide.config.types.AColor; import kr.syeyoung.dungeonsguide.dungeon.DungeonContext; +import kr.syeyoung.dungeonsguide.features.AbstractFeature; import kr.syeyoung.dungeonsguide.features.FeatureParameter; import kr.syeyoung.dungeonsguide.features.FeatureRegistry; import kr.syeyoung.dungeonsguide.features.SimpleFeature; @@ -177,14 +179,17 @@ public class FeatureWarningOnPortal extends SimpleFeature implements StyledTextP @Override - public String getEditRoute(final GuiConfig config) { + public String getEditRoute(RootConfigPanel rootConfigPanel) { ConfigPanelCreator.map.put("base." + getKey() , new Supplier<MPanel>() { @Override public MPanel get() { - return new PanelDefaultParameterConfig(config, FeatureWarningOnPortal.this, - Arrays.asList(new MPanel[] { - new PanelTextParameterConfig(config, FeatureWarningOnPortal.this) - }), Collections.singleton("textStyles")); + MFeatureEdit featureEdit = new MFeatureEdit(FeatureWarningOnPortal.this, rootConfigPanel); + featureEdit.addParameterEdit("textStyles", new PanelTextParameterConfig(FeatureWarningOnPortal.this)); + for (FeatureParameter parameter: getParameters()) { + if (parameter.getKey().equals("textStyles")) continue; + featureEdit.addParameterEdit(parameter.getKey(), new MParameterEdit(FeatureWarningOnPortal.this, parameter, rootConfigPanel)); + } + return featureEdit; } }); return "base." + getKey() ; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknameColor.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknameColor.java index c81539a0..7a46de61 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknameColor.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknameColor.java @@ -18,8 +18,8 @@ package kr.syeyoung.dungeonsguide.features.impl.cosmetics; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.ConfigPanelCreator; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.ConfigPanelCreator; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.RootConfigPanel; import kr.syeyoung.dungeonsguide.features.FeatureParameter; import kr.syeyoung.dungeonsguide.features.SimpleFeature; @@ -30,8 +30,8 @@ public class FeatureNicknameColor extends SimpleFeature { } @Override - public String getEditRoute(final GuiConfig config) { - ConfigPanelCreator.map.put("base." + getKey() , () -> new PrefixSelectorGUI(config, "color", new String[] { + public String getEditRoute(RootConfigPanel rootConfigPanel) { + ConfigPanelCreator.map.put("base." + getKey() , () -> new PrefixSelectorGUI("color", new String[] { "§9Party §8> §r§a[RANK§6+§a] %prefix%%name%§f: TEST", "§2Guild > §r§a[RANK§6+§a] %prefix%%name% §3[Vet]§f: TEST", "§dTo §r§r§a[RANK§r§6+§r§a] %prefix%%name%§r§7: §r§7TEST§r", diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknamePrefix.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknamePrefix.java index 4796eaa1..983e086b 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknamePrefix.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknamePrefix.java @@ -18,8 +18,8 @@ package kr.syeyoung.dungeonsguide.features.impl.cosmetics; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.ConfigPanelCreator; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.ConfigPanelCreator; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.RootConfigPanel; import kr.syeyoung.dungeonsguide.features.FeatureParameter; import kr.syeyoung.dungeonsguide.features.SimpleFeature; @@ -30,8 +30,8 @@ public class FeatureNicknamePrefix extends SimpleFeature { } @Override - public String getEditRoute(final GuiConfig config) { - ConfigPanelCreator.map.put("base." + getKey() , () -> new PrefixSelectorGUI(config, "prefix", new String[] { + public String getEditRoute(RootConfigPanel rootConfigPanel) { + ConfigPanelCreator.map.put("base." + getKey() , () -> new PrefixSelectorGUI("prefix", new String[] { "§9Party §8> §r%prefix% §a[RANK§6+§a] %name%§f: TEST", "§2Guild > §r%prefix% §a[RANK§6+§a] %name% §3[Vet]§f: TEST", "§dTo §r%prefix% §r§a[RANK§r§6+§r§a] %name%§r§7: §r§7TEST§r", diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/PrefixSelectorGUI.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/PrefixSelectorGUI.java index e888edcf..4750831e 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/PrefixSelectorGUI.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/PrefixSelectorGUI.java @@ -19,7 +19,6 @@ package kr.syeyoung.dungeonsguide.features.impl.cosmetics; import kr.syeyoung.dungeonsguide.DungeonsGuide; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; import kr.syeyoung.dungeonsguide.cosmetics.ActiveCosmetic; import kr.syeyoung.dungeonsguide.cosmetics.CosmeticData; import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager; @@ -37,12 +36,10 @@ import java.util.List; import java.util.function.Function; public class PrefixSelectorGUI extends MPanel { - private GuiConfig config; private String cosmeticType; private Function<String, String> optionTransformer; - public PrefixSelectorGUI(GuiConfig config, String cosmeticType, String[] previews, Function<String, String> optionTransformer) { - this.config = config; + public PrefixSelectorGUI(String cosmeticType, String[] previews, Function<String, String> optionTransformer) { this.cosmeticType = cosmeticType; this.previews = previews; this.optionTransformer = optionTransformer; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonRoomName.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonRoomName.java index 54631fcb..56ae9be8 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonRoomName.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonRoomName.java @@ -84,7 +84,7 @@ public class FeatureDungeonRoomName extends TextHUDFeature { Point roomPt = skyblockStatus.getContext().getMapProcessor().worldPointToRoomPoint(player.getPosition()); DungeonRoom dungeonRoom = skyblockStatus.getContext().getRoomMapper().get(roomPt); List<StyledText> actualBit = new ArrayList<StyledText>(); - dummyText.add(new StyledText("You're in ","in")); + actualBit.add(new StyledText("You're in ","in")); if (dungeonRoom == null) { actualBit.add(new StyledText("Unknown","roomname")); } else { diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/DataRendererEditor.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/DataRendererEditor.java index 09e89928..e2ff6a17 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/DataRendererEditor.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/DataRendererEditor.java @@ -18,7 +18,6 @@ package kr.syeyoung.dungeonsguide.features.impl.party.playerpreview; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; import kr.syeyoung.dungeonsguide.gui.MPanel; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -35,10 +34,8 @@ import java.util.Set; public class DataRendererEditor extends MPanel { private final FeatureViewPlayerOnJoin feature; - private final GuiConfig config; - public DataRendererEditor(GuiConfig config, FeatureViewPlayerOnJoin featureViewPlayerOnJoin) { - this.config = config; + public DataRendererEditor(FeatureViewPlayerOnJoin featureViewPlayerOnJoin) { this.feature = featureViewPlayerOnJoin; } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/FeatureViewPlayerOnJoin.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/FeatureViewPlayerOnJoin.java index c1730ed7..62405303 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/FeatureViewPlayerOnJoin.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/FeatureViewPlayerOnJoin.java @@ -24,11 +24,13 @@ import io.github.moulberry.hychat.HyChat; import io.github.moulberry.hychat.chat.ChatManager; import io.github.moulberry.hychat.gui.GuiChatBox; import kr.syeyoung.dungeonsguide.DungeonsGuide; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.ConfigPanelCreator; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.PanelDefaultParameterConfig; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.ConfigPanelCreator; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.MFeatureEdit; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.MParameterEdit; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.RootConfigPanel; import kr.syeyoung.dungeonsguide.cosmetics.ActiveCosmetic; import kr.syeyoung.dungeonsguide.cosmetics.CosmeticData; +import kr.syeyoung.dungeonsguide.features.AbstractFeature; import kr.syeyoung.dungeonsguide.features.FeatureParameter; import kr.syeyoung.dungeonsguide.features.FeatureRegistry; import kr.syeyoung.dungeonsguide.features.SimpleFeature; @@ -585,14 +587,18 @@ public class FeatureViewPlayerOnJoin extends SimpleFeature implements GuiPostRen @Override - public String getEditRoute(final GuiConfig config) { + public String getEditRoute(RootConfigPanel rootConfigPanel) { ConfigPanelCreator.map.put("base." + getKey() , new Supplier<MPanel>() { @Override public MPanel get() { - return new PanelDefaultParameterConfig(config, FeatureViewPlayerOnJoin.this, - Arrays.asList(new MPanel[] { - new DataRendererEditor(config, FeatureViewPlayerOnJoin.this) - }), Collections.singleton("datarenderers")); + + MFeatureEdit featureEdit = new MFeatureEdit(FeatureViewPlayerOnJoin.this, rootConfigPanel); + featureEdit.addParameterEdit("datarenderers", new DataRendererEditor(FeatureViewPlayerOnJoin.this)); + for (FeatureParameter parameter: getParameters()) { + if (parameter.getKey().equals("datarenderers")) continue; + featureEdit.addParameterEdit(parameter.getKey(), new MParameterEdit(FeatureViewPlayerOnJoin.this, parameter, rootConfigPanel)); + } + return featureEdit; } }); return "base." + getKey() ; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureMechanicBrowse.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureMechanicBrowse.java index 224ace06..d9c97ff6 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureMechanicBrowse.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureMechanicBrowse.java @@ -21,7 +21,6 @@ package kr.syeyoung.dungeonsguide.features.impl.secret; import com.google.common.collect.Lists; import kr.syeyoung.dungeonsguide.DungeonsGuide; import kr.syeyoung.dungeonsguide.SkyblockStatus; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig; import kr.syeyoung.dungeonsguide.config.types.AColor; import kr.syeyoung.dungeonsguide.dungeon.DungeonContext; @@ -78,7 +77,6 @@ public class FeatureMechanicBrowse extends GuiFeature implements GuiPreRenderLis @Override public void drawHUD(float partialTicks) { if (Minecraft.getMinecraft().currentScreen != null && !(Minecraft.getMinecraft().currentScreen instanceof GuiGuiLocationConfig - || Minecraft.getMinecraft().currentScreen instanceof GuiConfig || Minecraft.getMinecraft().currentScreen instanceof GuiDungeonRoomEdit || Minecraft.getMinecraft().currentScreen instanceof GuiDungeonAddSet || Minecraft.getMinecraft().currentScreen instanceof GuiDungeonParameterEdit diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/text/PanelTextParameterConfig.java b/src/main/java/kr/syeyoung/dungeonsguide/features/text/PanelTextParameterConfig.java index 70c0b2be..904aaaee 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/text/PanelTextParameterConfig.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/text/PanelTextParameterConfig.java @@ -18,7 +18,6 @@ package kr.syeyoung.dungeonsguide.features.text; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; import kr.syeyoung.dungeonsguide.config.types.AColor; import kr.syeyoung.dungeonsguide.gui.MPanel; import kr.syeyoung.dungeonsguide.gui.elements.MEditableAColor; @@ -47,15 +46,12 @@ public class PanelTextParameterConfig extends MPanel { @Override public void onBoundsUpdate() { } - @Override - public void resize(int parentWidth, int parentHeight) { - this.setBounds(new Rectangle(5,5,parentWidth-10, 120)); + public Dimension getPreferredSize() { + return new Dimension(400, 120); } - private final GuiConfig config; - public PanelTextParameterConfig(final GuiConfig config, final StyledTextProvider feature) { - this.config = config; + public PanelTextParameterConfig(final StyledTextProvider feature) { this.feature = feature; setBackgroundColor(new Color(38, 38, 38, 255)); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/text/TextHUDFeature.java b/src/main/java/kr/syeyoung/dungeonsguide/features/text/TextHUDFeature.java index b3488bdd..0aecc0e6 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/text/TextHUDFeature.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/text/TextHUDFeature.java @@ -19,16 +19,20 @@ package kr.syeyoung.dungeonsguide.features.text; import com.google.common.base.Supplier; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.ConfigPanelCreator; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.GuiConfig; +import com.google.gson.JsonObject; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.ConfigPanelCreator; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.MFeatureEdit; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.MParameterEdit; +import kr.syeyoung.dungeonsguide.config.guiconfig.nyu.RootConfigPanel; import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig; -import kr.syeyoung.dungeonsguide.config.guiconfig.old.PanelDefaultParameterConfig; import kr.syeyoung.dungeonsguide.config.types.AColor; +import kr.syeyoung.dungeonsguide.features.AbstractFeature; import kr.syeyoung.dungeonsguide.features.FeatureParameter; import kr.syeyoung.dungeonsguide.features.GuiFeature; import kr.syeyoung.dungeonsguide.gui.MPanel; import kr.syeyoung.dungeonsguide.gui.elements.MFloatSelectionButton; import kr.syeyoung.dungeonsguide.gui.elements.MPassiveLabelAndElement; +import kr.syeyoung.dungeonsguide.gui.elements.MStringSelectionButton; import kr.syeyoung.dungeonsguide.gui.elements.MToggleButton; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.GlStateManager; @@ -40,10 +44,8 @@ public abstract class TextHUDFeature extends GuiFeature implements StyledTextPro protected TextHUDFeature(String category, String name, String description, String key, boolean keepRatio, int width, int height) { super(category, name, description, key, keepRatio, width, height); this.parameters.put("textStylesNEW", new FeatureParameter<List<TextStyle>>("textStylesNEW", "", "", new ArrayList<TextStyle>(), "list_textStyle")); - this.parameters.put("alignRight", new FeatureParameter<Boolean>("alignRight", "Align Right", "Align text to right", false, "boolean")); - this.parameters.put("alignCenter", new FeatureParameter<Boolean>("alignCenter", "Align Center", "Align text to center (overrides alignright)", false, "boolean")); + this.parameters.put("alignment", new FeatureParameter<String>("alignment", "Alignment", "Alignment", "LEFT", "string")); this.parameters.put("scale", new FeatureParameter<Float>("scale", "Scale", "Scale", 1.0f, "float")); - } @Override @@ -59,7 +61,8 @@ public abstract class TextHUDFeature extends GuiFeature implements StyledTextPro scale = this.<Float>getParameter("scale").getValue(); } GlStateManager.scale(scale, scale, 0); - StyledTextRenderer.drawTextWithStylesAssociated(getText(), 0, 0, (int) (Math.abs(getFeatureRect().getWidth())/scale), getStylesMap(),this.<Boolean>getParameter("alignCenter").getValue() ? StyledTextRenderer.Alignment.CENTER : this.<Boolean>getParameter("alignRight").getValue() ? StyledTextRenderer.Alignment.RIGHT : StyledTextRenderer.Alignment.LEFT); + StyledTextRenderer.drawTextWithStylesAssociated(asd, 0, 0, (int) (Math.abs(getFeatureRect().getWidth())/scale), getStylesMap(), + StyledTextRenderer.Alignment.valueOf(TextHUDFeature.this.<String>getParameter("alignment").getValue())); } } @@ -78,7 +81,9 @@ public abstract class TextHUDFeature extends GuiFeature implements StyledTextPro scale = this.<Float>getParameter("scale").getValue(); } GlStateManager.scale(scale, scale, 0); - StyledTextRenderer.drawTextWithStylesAssociated(getDummyText(), 0, 0, (int) (Math.abs(getFeatureRect().getWidth())/scale), getStylesMap(),this.<Boolean>getParameter("alignCenter").getValue() ? StyledTextRenderer.Alignment.CENTER : this.<Boolean>getParameter("alignRight").getValue() ? StyledTextRenderer.Alignment.RIGHT : StyledTextRenderer.Alignment.LEFT); + + StyledTextRenderer.drawTextWithStylesAssociated(asd, 0, 0, (int) (Math.abs(getFeatureRect().getWidth())/scale), getStylesMap(), + StyledTextRenderer.Alignment.valueOf(TextHUDFeature.this.<String>getParameter("alignment").getValue())); } public int countLines(List<StyledText> texts) { @@ -124,14 +129,27 @@ public abstract class TextHUDFeature extends GuiFeature implements StyledTextPro @Override - public String getEditRoute(final GuiConfig config) { + public String getEditRoute(RootConfigPanel rootConfigPanel) { ConfigPanelCreator.map.put("base." + getKey() , new Supplier<MPanel>() { @Override public MPanel get() { - return new PanelDefaultParameterConfig(config, TextHUDFeature.this, - Arrays.asList(new MPanel[] { - new PanelTextParameterConfig(config, TextHUDFeature.this) - }), Collections.singleton("textStylesNEW")); + + MFeatureEdit featureEdit = new MFeatureEdit(TextHUDFeature.this, rootConfigPanel); + featureEdit.addParameterEdit("textStyleNEW", new PanelTextParameterConfig(TextHUDFeature.this)); + + StyledTextRenderer.Alignment alignment = StyledTextRenderer.Alignment.valueOf(TextHUDFeature.this.<String>getParameter("alignment").getValue()); + MStringSelectionButton mStringSelectionButton = new MStringSelectionButton(Arrays.asList("LEFT", "CENTER", "RIGHT"), alignment.name()); + mStringSelectionButton.setOnUpdate(() -> { + TextHUDFeature.this.<String>getParameter("alignment").setValue(mStringSelectionButton.getSelected()); + }); + featureEdit.addParameterEdit("alignment", new MParameterEdit(TextHUDFeature.this, TextHUDFeature.this.<String>getParameter("alignment"), rootConfigPanel, mStringSelectionButton)); + + for (FeatureParameter parameter: getParameters()) { + if (parameter.getKey().equals("textStylesNEW")) continue; + if (parameter.getKey().equals("alignment")) continue; + featureEdit.addParameterEdit(parameter.getKey(), new MParameterEdit(TextHUDFeature.this, parameter, rootConfigPanel)); + } + return featureEdit; } }); return "base." + getKey() ; @@ -140,18 +158,13 @@ public abstract class TextHUDFeature extends GuiFeature implements StyledTextPro @Override public List<MPanel> getTooltipForEditor(GuiGuiLocationConfig guiGuiLocationConfig) { List<MPanel> mPanels = super.getTooltipForEditor(guiGuiLocationConfig); - mPanels.add(new MPassiveLabelAndElement("Align Right", new MToggleButton() {{ - setEnabled(TextHUDFeature.this.<Boolean>getParameter("alignRight").getValue()); - setOnToggle(() ->{ - TextHUDFeature.this.<Boolean>getParameter("alignRight").setValue(isEnabled()); - }); } - })); - mPanels.add(new MPassiveLabelAndElement("Align Center", new MToggleButton() {{ - setEnabled(TextHUDFeature.this.<Boolean>getParameter("alignCenter").getValue()); - setOnToggle(() ->{ - TextHUDFeature.this.<Boolean>getParameter("alignCenter").setValue(isEnabled()); - }); } - })); + StyledTextRenderer.Alignment alignment = StyledTextRenderer.Alignment.valueOf(this.<String>getParameter("alignment").getValue()); + MStringSelectionButton mStringSelectionButton = new MStringSelectionButton(Arrays.asList("LEFT", "CENTER", "RIGHT"), alignment.name()); + mStringSelectionButton.setOnUpdate(() -> { + TextHUDFeature.this.<String>getParameter("alignment").setValue(mStringSelectionButton.getSelected()); + }); + + mPanels.add(new MPassiveLabelAndElement("Alignment", mStringSelectionButton)); if (!doesScaleWithHeight()) { mPanels.add(new MPassiveLabelAndElement("Scale", new MFloatSelectionButton(TextHUDFeature.this.<Float>getParameter("scale").getValue()) {{ setOnUpdate(() ->{ @@ -162,4 +175,14 @@ public abstract class TextHUDFeature extends GuiFeature implements StyledTextPro return mPanels; } + + @Override + public void loadConfig(JsonObject jsonObject) { + super.loadConfig(jsonObject); + StyledTextRenderer.Alignment alignment; + try { + alignment = StyledTextRenderer.Alignment.valueOf(TextHUDFeature.this.<String>getParameter("alignment").getValue()); + } catch (Exception e) {alignment = StyledTextRenderer.Alignment.LEFT;} + TextHUDFeature.this.<String>getParameter("alignment").setValue(alignment.name()); + } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java index d523c923..f086c997 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java @@ -111,6 +111,7 @@ public class MGui extends GuiScreen { try { Mouse.setNativeCursor(null); + mainPanel.setCursor(EnumCursor.DEFAULT); } catch (LWJGLException e) { e.printStackTrace(); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java index 126d69b6..99010090 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java @@ -153,9 +153,9 @@ public class MPanel { GlStateManager.popAttrib(); GlStateManager.popMatrix(); if (debug && lastAbsClip.contains(absMousex, absMousey)) { - Gui.drawRect(0, 0, getBounds().width, getBounds().height, 0x2200FF00); GL11.glDisable(GL11.GL_SCISSOR_TEST); -// Gui.drawRect(0, 0, getPreferredSize().width, getPreferredSize().height, 0x220000FF); + Gui.drawRect(0, 0, getBounds().width, getBounds().height, 0x2200FF00); + Gui.drawRect(0, 0, getPreferredSize().width, getPreferredSize().height, 0x220000FF); } GL11.glDisable(GL11.GL_SCISSOR_TEST); @@ -175,7 +175,7 @@ public class MPanel { public void clip(int x, int y, int width, int height) { if (width < 0 || height < 0) return; - GL11.glScissor((int) (x * scale), Minecraft.getMinecraft().displayHeight - (int) ((y + height) * scale), (int)(width* scale), (int) (height * scale)); + GL11.glScissor((int) (x * scale), Minecraft.getMinecraft().displayHeight - (int) ((y + height) * scale), (int)(width* scale + scale) - 1, (int) (height * scale + scale) - 1); } protected Rectangle determineClip(Rectangle rect1, Rectangle rect2) { diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java index 1a1f30d4..ff8061e7 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java @@ -41,6 +41,7 @@ public class MButton extends MPanel { private int background = RenderUtils.blendAlpha(0xFF141414, 0.08f); private int hover = RenderUtils.blendAlpha(0xFF141414, 0.14f); private int clicked = RenderUtils.blendAlpha(0xFF141414, 0.16f); + private int border = 0x0; private int disabled =0xFF141414; private boolean enabled = true; @@ -59,8 +60,12 @@ public class MButton extends MPanel { } else if (new Rectangle(new Point(0,0),bounds).contains(relMousex0, relMousey0)) { bg = hover; } - Gui.drawRect(0,0,getBounds().width, getBounds().height, bg); - + if (((border >> 24) & 0xFF) == 0) + Gui.drawRect(0,0,getBounds().width, getBounds().height, bg); + else { + Gui.drawRect(0, 0, getBounds().width, getBounds().height, border); + Gui.drawRect(1, 1, getBounds().width-1, getBounds().height-1, bg); + } FontRenderer renderer = Minecraft.getMinecraft().fontRendererObj; int width = renderer.getStringWidth(getText()); int x = (getBounds().width - width) / 2; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MCollapsable.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MCollapsable.java index 20fa2c93..85b86f40 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MCollapsable.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MCollapsable.java @@ -84,7 +84,7 @@ public class MCollapsable extends MPanel { super.render0(scale, parentPoint, parentClip, absMousex, absMousey, relMousex0, relMousey0, partialTicks); clip(lastAbsClip.x, lastAbsClip.y, lastAbsClip.width, lastAbsClip.height); -// GL11.glEnable(GL11.GL_SCISSOR_TEST); + GL11.glEnable(GL11.GL_SCISSOR_TEST); GlStateManager.pushMatrix(); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MEditableAColor.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MEditableAColor.java index f47f1fd0..888d1e03 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MEditableAColor.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MEditableAColor.java @@ -25,6 +25,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.renderer.GlStateManager; import org.lwjgl.opengl.GL11; @@ -80,7 +81,7 @@ public class MEditableAColor extends MPanel { @Override public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) { if (!enableEdit) return; - if (lastAbsClip.contains(absMouseX, absMouseY) && portable == null) { + if (lastAbsClip.contains(absMouseX, absMouseY) && getTooltipsOpen() == 0) { portable = new MPortableColorEdit() { @Override public void update2() { @@ -91,11 +92,16 @@ public class MEditableAColor extends MPanel { } }; portable.setColor(color); - portable.setBounds(new Rectangle(relMouseX, relMouseY, 100, 90)); - add(portable); - } else if (portable != null && !portable.getBounds().contains(relMouseX, relMouseY)) { - remove(portable); - portable = null; + Rectangle startWith = new Rectangle((int)(absMouseX * getScale()), (int) (absMouseY* getScale()), (int) (100 * getScale()), (int) (90 * getScale())); + if (startWith.x < 10) startWith.x = 10; + if (startWith.y < 10) startWith.y = 10; + if (startWith.x + startWith.width > Minecraft.getMinecraft().displayWidth - 10) startWith.x = Minecraft.getMinecraft().displayWidth - 10 - startWith.width; + if (startWith.y + startWith.height > Minecraft.getMinecraft().displayHeight - 10) startWith.y = Minecraft.getMinecraft().displayHeight - 10 - startWith.height; + portable.setBounds(startWith); + + + portable.setScale(2.0f); + portable.open(this); } } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java index 9719f63f..8823087e 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java @@ -43,8 +43,9 @@ public class MList extends MPanel { int y = 0; for (MPanel childComponent : getChildComponents()) { Dimension preferedSize = childComponent.getPreferredSize(); - childComponent.setBounds(new Rectangle(0, y, bounds.width, Math.max(10, preferedSize.height))); - y += preferedSize.height; + int height = Math.max(10, preferedSize.height); + childComponent.setBounds(new Rectangle(0, y, bounds.width, height)); + y += height; if (gap > 0) y += gap; } @@ -57,8 +58,9 @@ public class MList extends MPanel { int h = 0; for (MPanel childComponent : getChildComponents()) { Dimension preferedSize = childComponent.getPreferredSize(); + int height = Math.max(10, preferedSize.height); if (preferedSize.width > maxW) maxW = preferedSize.width; - h += preferedSize.height; + h += height; if (gap > 0) h += gap; } return new Dimension(maxW, Math.max(0, h-gap)); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPanelScaledGUI.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPanelScaledGUI.java index 4a1d30ee..169e99b5 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPanelScaledGUI.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPanelScaledGUI.java @@ -30,15 +30,16 @@ import java.awt.*; public class MPanelScaledGUI extends MPanel { @Getter - private double scale = 1.0; + protected double scale = 1.0; - private double relativeScale; + protected double relativeScale; public void setScale(double scale) { this.scale = scale; for (MPanel childComponent : childComponents) { childComponent.resize0((int) (getBounds().width/scale), (int) (getBounds().height/scale)); } + onBoundsUpdate(); } @Override @@ -84,6 +85,7 @@ public class MPanelScaledGUI extends MPanel { GlStateManager.scale(this.scale, this.scale, 1); clip = new Rectangle((int) (clip.x / scale), (int) (clip.y / scale), (int) (clip.width / scale), (int) (clip.height / scale)); + lastAbsClip = clip; this.relativeScale = parentScale * this.scale; @@ -119,7 +121,7 @@ public class MPanelScaledGUI extends MPanel { for (MPanel mPanel : getChildComponents()){ GlStateManager.pushMatrix(); GlStateManager.pushAttrib(); - mPanel.render0(scale, newPt,clip,absMousex, absMousey, relMousex, relMousey, partialTicks); + mPanel.render0(relativeScale, newPt,clip,absMousex, absMousey, relMousex, relMousey, partialTicks); GlStateManager.popAttrib(); GlStateManager.popMatrix(); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPortableColorEdit.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPortableColorEdit.java index 9bd3b130..6b2f162e 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPortableColorEdit.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPortableColorEdit.java @@ -36,7 +36,7 @@ import org.lwjgl.opengl.GL11; import java.awt.*; -public class MPortableColorEdit extends MPanel { +public class MPortableColorEdit extends MTooltip { private final float[] hsv = new float[3]; private float alpha = 0; @@ -71,7 +71,7 @@ public class MPortableColorEdit extends MPanel { public void onBoundsUpdate() { super.onBoundsUpdate(); - textField.setBounds(new Rectangle(5, getBounds().height - 25, getBounds().width - 10, 20)); + textField.setBounds(new Rectangle(5, getEffectiveDimension().height - 25, getEffectiveDimension().width - 10, 20)); } public void setColor(AColor color) { @@ -88,11 +88,12 @@ public class MPortableColorEdit extends MPanel { @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { + Dimension size = getEffectiveDimension(); - Gui.drawRect(0,0,getSize().width,getSize().height, 0xff333333); - Gui.drawRect(1,1,getSize().width-1,getSize().height-1, 0xffa1a1a1); + Gui.drawRect(0,0,size.width,size.height, 0xff333333); + Gui.drawRect(1,1,size.width-1,size.height-1, 0xffa1a1a1); - int width = getBounds().height- 35; + int width = size.height- 35; Tessellator tessellator = Tessellator.getInstance(); WorldRenderer worldrenderer = tessellator.getWorldRenderer(); int shademodel = GL11.glGetInteger(GL11.GL_SHADE_MODEL); @@ -200,60 +201,20 @@ public class MPortableColorEdit extends MPanel { GlStateManager.color(1,1,1,1); } - @Override - public void render0(double scale, Point parentPoint, Rectangle parentClip, int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks) { - int relMousex = relMousex0 - getBounds().x; - int relMousey = relMousey0 - getBounds().y; - - GlStateManager.translate(getBounds().x, getBounds().y, 0); - GlStateManager.color(1,1,1,0); - - - Rectangle absBound = getBounds().getBounds(); - absBound.setLocation(absBound.x + parentPoint.x, absBound.y + parentPoint.y); - Rectangle clip = determineClip(parentClip, absBound); - lastAbsClip = clip; -this.scale =scale; - clip(clip.x, clip.y, clip.width, clip.height); - GlStateManager.pushAttrib(); - GL11.glDisable(GL11.GL_SCISSOR_TEST); - - GlStateManager.pushAttrib(); - GuiScreen.drawRect(0,0, getBounds().width, getBounds().height, backgroundColor.getRGB()); - GlStateManager.popAttrib(); - - GlStateManager.pushMatrix(); - GlStateManager.pushAttrib(); - render(absMousex, absMousey, relMousex, relMousey, partialTicks, clip); - GlStateManager.popAttrib(); - GlStateManager.popMatrix(); - - GL11.glEnable(GL11.GL_SCISSOR_TEST); - GlStateManager.popAttrib(); - - - Point newPt = new Point(parentPoint.x + getBounds().x, parentPoint.y + getBounds().y); - - for (MPanel mPanel : getChildComponents()){ - GlStateManager.pushMatrix(); - GlStateManager.pushAttrib(); - mPanel.render0(scale, newPt, new Rectangle(newPt, new Dimension(getBounds().getSize())), absMousex, absMousey, relMousex, relMousey, partialTicks); - GlStateManager.popAttrib(); - GlStateManager.popMatrix(); - } - } - private int selected = 0; @Override public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) { - int width = getBounds().height- 35; + int width = getEffectiveDimension().height- 35; float radius = width / 2f; float circleX = 5 + radius; float circleY = 5 + radius; selected = 0; - if (!getBounds().contains(relMouseX, relMouseY)) return; + if (!lastAbsClip.contains(absMouseX, absMouseY)) { + close(); + return; + } { // check circle @@ -292,7 +253,7 @@ this.scale =scale; @Override public void mouseClickMove(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int clickedMouseButton, long timeSinceLastClick) { - int width = getBounds().height- 35; + int width = getEffectiveDimension().height- 35; float radius = width / 2f; float circleX = 5 + radius; float circleY = 5 + radius; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java index 1797297a..82e91dab 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java @@ -42,6 +42,30 @@ public class MScrollBar extends MPanel { @Setter private int width = 10; + public void setMax(int max) { + this.max = max; + + current = MathHelper.clamp_int(current, min, max - thumbSize); + if (max - min < thumbSize) current = min; + if (onUpdate != null) onUpdate.run(); + } + + public void setMin(int min) { + this.min = min; + + current = MathHelper.clamp_int(current, min, max - thumbSize); + if (max - min < thumbSize) current = min; + if (onUpdate != null) onUpdate.run(); + } + + public void setThumbSize(int thumbSize) { + this.thumbSize = thumbSize; + + current = MathHelper.clamp_int(current, min, max - thumbSize); + if (max - min < thumbSize) current = min; + if (onUpdate != null) onUpdate.run(); + } + public void addToCurrent(int dv) { int current2 = current + dv; @@ -72,6 +96,12 @@ public class MScrollBar extends MPanel { this.onUpdate = onUpdate; } + @Override + public void setBounds(Rectangle bounds) { + super.setBounds(bounds); + lastThumbRect.width = 0; lastThumbRect.height = 0; + } + private Rectangle lastThumbRect = new Rectangle(); @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { @@ -156,7 +186,8 @@ public class MScrollBar extends MPanel { public void mouseMoved(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0) { if (grabbed) setCursor(EnumCursor.CLOSED_HAND); - else if (lastThumbRect.contains(relMouseX0, relMouseY0)) + else if (lastThumbRect.contains(relMouseX0, relMouseY0)) { setCursor(EnumCursor.OPEN_HAND); + } } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java index 42a3cb91..d09b7c5a 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java @@ -102,9 +102,9 @@ public class MScrollablePanel extends MPanel { public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { super.render(absMousex, absMousey, relMousex0, relMousey0, partialTicks, scissor); - boolean hideX = false, hideY = false; - if (bounds.width > contentAreaDim.width && hideScrollBarWhenNotNecessary) hideX = true; - if (bounds.height > contentAreaDim.height && hideScrollBarWhenNotNecessary) hideY = true; + boolean hideX = (axis & 2) == 0, hideY = (axis & 1) == 0; + if (bounds.width >= contentAreaDim.width && hideScrollBarWhenNotNecessary) hideX = true; + if (bounds.height >= contentAreaDim.height && hideScrollBarWhenNotNecessary) hideY = true; if (axis == 3 && !(hideX && hideY)) { Gui.drawRect(scrollBarX.getBounds().width, scrollBarY.getBounds().height, getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.03f)); } @@ -161,6 +161,7 @@ public class MScrollablePanel extends MPanel { scrollBarX.setThumbSize(viewPort.getBounds().width); scrollBarY.setThumbSize(viewPort.getBounds().height); + evalulateContentArea(); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MStringSelectionButton.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MStringSelectionButton.java index 95882085..7666865a 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MStringSelectionButton.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MStringSelectionButton.java @@ -48,6 +48,8 @@ public class MStringSelectionButton extends MPanel { dec = new MButton(); dec.setText("<"); add(dec); inc = new MButton(); inc.setText(">"); add(inc); selected = new MLabel(); updateSelected(); add(selected); + selected.setBackgroundColor(Color.black); + selected.setAlignment(MLabel.Alignment.CENTER); dec.setOnActionPerformed(new Runnable() { @Override diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java index 6054a68f..b61837a4 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java @@ -22,11 +22,13 @@ import kr.syeyoung.dungeonsguide.gui.MPanel; import kr.syeyoung.dungeonsguide.utils.RenderUtils; import kr.syeyoung.dungeonsguide.utils.cursor.EnumCursor; 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.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.MathHelper; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL14; @@ -39,8 +41,11 @@ import java.io.IOException; @Getter public class MTextField extends MPanel { private final Color foreground = Color.white; + private final Color placeHolderColor = Color.lightGray; private String text = ""; + @Setter + private String placeHolder = ""; private int cursorBlickTicker = 0; private int selectionStart = 0; @@ -62,9 +67,22 @@ public class MTextField extends MPanel { edit(text); } + private void setCursor0(int cursor) { + if (cursor > text.length()) cursor = text.length(); + if (cursor < 0) cursor = 0; + this.cursor = cursor; + + + int width = Minecraft.getMinecraft().fontRendererObj.getStringWidth(text.substring(0, cursor)); + int cursorX = width + 3- xOffset; + cursorX = MathHelper.clamp_int(cursorX,10, getBounds().width - 10); + xOffset = width+ 3 - cursorX; + xOffset = MathHelper.clamp_int(xOffset, 0,Math.max(0, Minecraft.getMinecraft().fontRendererObj.getStringWidth(text) - getBounds().width+10)); + } @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle clip) { + clip(clip.x - 1, clip.y - 1, clip.width +2, clip.height + 2); Gui.drawRect(0,0,getBounds().width, getBounds().height, isFocused ? Color.white.getRGB() : Color.gray.getRGB()); Gui.drawRect(1,1,getBounds().width - 1, getBounds().height - 1, Color.black.getRGB()); @@ -76,6 +94,8 @@ public class MTextField extends MPanel { 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(text, 3 - xOffset, y, foreground.getRGB()); + if (text.isEmpty()) + fr.drawString(placeHolder, 3, y, placeHolderColor.getRGB()); // draw selection if (isFocused) { if (selectionStart != -1) { @@ -90,7 +110,7 @@ public class MTextField extends MPanel { // draw cursor if (cursor != -1) { - if (cursor > text.length()) cursor = text.length(); + if (cursor > text.length()) setCursor0(text.length()); int x = fr.getStringWidth(text.substring(0, cursor)) - xOffset; cursorBlickTicker++; if (cursorBlickTicker < 10) @@ -120,11 +140,11 @@ public class MTextField extends MPanel { for (int i = 0; i < text.length(); i++) { int totalWidth = fr.getStringWidth(text.substring(0, i)); if (offseted < totalWidth) { - cursor = i; + setCursor0(i); return; } } - cursor = text.length(); + setCursor0(text.length()); } @Override @@ -184,31 +204,35 @@ public class MTextField extends MPanel { if (selectionStart == -1) { if (keycode == 199) { // home - cursor = 0; + setCursor0(0); + xOffset = 0; return; } if (keycode == 207) { // end - cursor = text.length(); + setCursor0(text.length()); + + int width = Minecraft.getMinecraft().fontRendererObj.getStringWidth(text); + xOffset = Integer.max(0, width - getBounds().width+10); return; } if (keycode == 203) { // left - cursor--; - if (cursor < 0) cursor = 0; + setCursor0(this.cursor-1);; + if (cursor < 0) setCursor0(0); return; } if (keycode == 205) { // right - cursor ++; - if (cursor > text.length()) cursor = text.length(); + setCursor0(this.cursor+1); + if (cursor > text.length()) setCursor0(text.length()); return; } // backspace if (keycode == 14 && cursor > 0) { - setText0(this.text.substring(0, cursor - 1) + this.text.substring(cursor)); - cursor--; + setText0(this.text.substring(0, cursor-1) + this.text.substring(cursor)); + setCursor0(this.cursor-1); return; } @@ -257,30 +281,33 @@ public class MTextField extends MPanel { this.text.substring(0, this.cursor) + typedChar + this.text.substring(this.cursor)); - this.cursor++; + this.setCursor0(this.cursor+1);; return; } } else { if (keycode == 199) { // home - cursor = 0; + setCursor0(0); selectionStart = -1; + xOffset =0; return; } if (keycode == 207) { // end selectionStart = -1; - cursor = text.length(); + setCursor0(text.length()); + int width = Minecraft.getMinecraft().fontRendererObj.getStringWidth(text); + xOffset = Integer.max(0, width - getBounds().width+10); return; } if (keycode == 203) { // left - cursor = selectionStart; + setCursor0(selectionStart); selectionStart = -1; return; } if (keycode == 205) { // right - cursor = selectionEnd; + setCursor0(selectionEnd); selectionStart = -1; return; } @@ -288,7 +315,7 @@ public class MTextField extends MPanel { // backspace if (keycode == 14 && cursor > 0) { setText0(this.text.substring(0, selectionStart) + this.text.substring(selectionEnd)); - cursor = selectionStart; + setCursor0(selectionStart); selectionStart = -1; return; } @@ -296,7 +323,7 @@ public class MTextField extends MPanel { //del if (keycode == 211 && cursor < text.length()) { setText0(this.text.substring(0, selectionStart) + this.text.substring(selectionEnd)); - cursor = selectionStart; + setCursor0(selectionStart); selectionStart = -1; return; } @@ -323,7 +350,7 @@ public class MTextField extends MPanel { this.text.substring(0, this.selectionStart) + theText + this.text.substring(this.selectionEnd)); - cursor = this.selectionStart + theText.toString().length(); + setCursor0(this.selectionStart + theText.toString().length()); } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { @@ -358,7 +385,7 @@ public class MTextField extends MPanel { this.text.substring(0, this.selectionStart) + typedChar + this.text.substring(this.selectionEnd)); - this.cursor = this.selectionStart + 1; + this.setCursor0(this.selectionStart + 1); selectionStart = -1; return; } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MToggleButton.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MToggleButton.java index d3a3fe06..5709906f 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MToggleButton.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MToggleButton.java @@ -38,14 +38,16 @@ public class MToggleButton extends MPanel { private boolean enabled = true; private Runnable onToggle; + private int border = 0xFF333333, background = 0xFF171717; + @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle clip) { Dimension bounds = getSize(); int gap = 1; - Gui.drawRect(0, 0, bounds.width, bounds.height, 0xFF333333); - Gui.drawRect(gap, gap, bounds.width-gap, bounds.height-gap, 0xFF171717); + Gui.drawRect(0, 0, bounds.width, bounds.height, border); + Gui.drawRect(gap, gap, bounds.width-gap, bounds.height-gap, background); FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTooltip.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTooltip.java index 7492f17d..89967f5b 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTooltip.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTooltip.java @@ -28,7 +28,7 @@ import org.lwjgl.opengl.GL11; import java.awt.*; -public class MTooltip extends MPanel { +public class MTooltip extends MPanelScaledGUI { @Getter @Setter private MRootPanel root; @@ -50,22 +50,37 @@ public class MTooltip extends MPanel { return super.getTooltipsOpen() - 1; } - public void render0(double scale, Point parentPoint, Rectangle parentClip, int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks) { // 0,0 - a a - int relMousex = relMousex0 - getBounds().x; - int relMousey = relMousey0 - getBounds().y; + @Override + public void render0(double parentScale, Point parentPoint, Rectangle parentClip, int absMousex0, int absMousey0, int relMousex0, int relMousey0, float partialTicks) { + lastParentPoint = parentPoint; GlStateManager.translate(getBounds().x, getBounds().y, 300); GlStateManager.color(1,1,1,0); + Rectangle absBound = getBounds().getBounds(); + absBound.setLocation(absBound.x + parentPoint.x, absBound.y + parentPoint.y); + + Rectangle clip = absBound; + lastAbsClip = clip; + + if (clip.getSize().height * clip.getSize().width == 0) return; + + int absMousex = (int) (absMousex0 / scale), absMousey = (int) (absMousey0 / scale); + int relMousex = (int) ((relMousex0 - getBounds().x) / scale); + int relMousey = (int) ((relMousey0 - getBounds().y) /scale); + + // FROM HERE, IT IS SCALED - Rectangle clip = getBounds().getBounds(); + GlStateManager.scale(this.scale, this.scale, 1); + clip = new Rectangle((int) (clip.x / scale), (int) (clip.y / scale), (int) (clip.width / scale), (int) (clip.height / scale)); + lastAbsClip = clip; GlStateManager.pushAttrib(); GL11.glEnable(GL11.GL_SCISSOR_TEST); - this.scale = scale; + this.relativeScale = parentScale * this.scale; clip(clip.x, clip.y, clip.width, clip.height); GlStateManager.pushAttrib(); - GuiScreen.drawRect(0,0, getBounds().width, getBounds().height, backgroundColor.getRGB()); + GuiScreen.drawRect(0,0, (int) (getBounds().width / scale), (int) (getBounds().height / scale), backgroundColor.getRGB()); GlStateManager.enableBlend(); GlStateManager.popAttrib(); @@ -79,12 +94,12 @@ public class MTooltip extends MPanel { GlStateManager.popAttrib(); - Point newPt = new Point(parentPoint.x + getBounds().x, parentPoint.y + getBounds().y); + Point newPt = new Point((int) ((parentPoint.x + getBounds().x) / scale), (int) ((parentPoint.y + getBounds().y) / scale)); for (MPanel mPanel : getChildComponents()){ GlStateManager.pushMatrix(); GlStateManager.pushAttrib(); - mPanel.render0(scale, newPt, clip, absMousex, absMousey, relMousex, relMousey, partialTicks); + mPanel.render0(relativeScale, newPt,clip,absMousex, absMousey, relMousex, relMousey, partialTicks); GlStateManager.popAttrib(); GlStateManager.popMatrix(); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomedit/Parameter.java b/src/main/java/kr/syeyoung/dungeonsguide/roomedit/Parameter.java index 1cb3d548..eb4d8987 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomedit/Parameter.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomedit/Parameter.java @@ -22,9 +22,19 @@ import lombok.AllArgsConstructor; import lombok.Data; @Data -@AllArgsConstructor public class Parameter { private String name; private Object previousData; private Object newData; + + public Parameter(String name, Object previousData, Object newData) { + this.name = name; this.previousData = previousData; this.newData = newData; + } + + private Runnable onSetNewData; + + public void setNewData(Object newData) { + this.newData = newData; + if (onSetNewData != null) onSetNewData.run(); + } } |