aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/cc/polyfrost/oneconfig/gui/pages
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/gui/pages')
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java28
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/pages/ModConfigPage.java152
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java76
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java31
4 files changed, 287 insertions, 0 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java
new file mode 100644
index 0000000..83e095c
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java
@@ -0,0 +1,28 @@
+package cc.polyfrost.oneconfig.gui.pages;
+
+import cc.polyfrost.oneconfig.config.OneConfigConfig;
+import cc.polyfrost.oneconfig.gui.elements.BasicButton;
+import cc.polyfrost.oneconfig.lwjgl.RenderManager;
+import cc.polyfrost.oneconfig.lwjgl.font.Fonts;
+import cc.polyfrost.oneconfig.lwjgl.image.Images;
+
+public class HomePage extends Page {
+ private final BasicButton btn = new BasicButton(184, 36, "Socials", Images.SHARE, Images.LAUNCH, 1, BasicButton.ALIGNMENT_CENTER);
+
+ public HomePage() {
+ super("Home Dashboard");
+ }
+
+ public void draw(long vg, int x, int y) {
+ RenderManager.drawRoundedRect(vg, x, y, 184, 36, -1, 12f);
+ RenderManager.drawString(vg, "This is a cool string to test pages", x + 32, y + 72, -1, 36f, Fonts.INTER_BOLD);
+ RenderManager.drawRoundedRect(vg, x + 350, y + 310, 300, 200, OneConfigConfig.BLUE_600, 14f);
+ //RenderManager.drawRoundedRect(vg);
+ btn.draw(vg, x + 432, y + 658);
+ }
+
+ @Override
+ public boolean isBase() {
+ return true;
+ }
+}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModConfigPage.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModConfigPage.java
new file mode 100644
index 0000000..f335e4d
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModConfigPage.java
@@ -0,0 +1,152 @@
+package cc.polyfrost.oneconfig.gui.pages;
+
+import cc.polyfrost.oneconfig.config.OneConfigConfig;
+import cc.polyfrost.oneconfig.config.data.OptionPage;
+import cc.polyfrost.oneconfig.config.interfaces.BasicOption;
+import cc.polyfrost.oneconfig.gui.elements.BasicButton;
+import cc.polyfrost.oneconfig.lwjgl.font.Fonts;
+import cc.polyfrost.oneconfig.gui.elements.config.ConfigPageButton;
+import cc.polyfrost.oneconfig.lwjgl.RenderManager;
+
+import java.util.ArrayList;
+
+public class ModConfigPage extends Page {
+ private final OptionPage page;
+ private final ArrayList<BasicButton> categories = new ArrayList<>();
+ private String selectedCategory;
+
+ public ModConfigPage(OptionPage page) {
+ super(page.name);
+ this.page = page;
+ if (page.categories.size() == 0) return;
+ for (String category : page.categories.keySet()) {
+ selectedCategory = category;
+ break;
+ }
+ if (page.categories.size() < 2) return;
+ for (String category : page.categories.keySet()) {
+ BasicButton button = new BasicButton(0, 32, category, null, null, 0, BasicButton.ALIGNMENT_CENTER, true, () -> switchCategory(category));
+ if (category.equals(selectedCategory)) button.setToggled(true);
+ categories.add(button);
+ }
+ }
+
+ @Override
+ public void draw(long vg, int x, int y) {
+ if (page.categories.size() == 0) return;
+ int optionX = x + 30;
+ int optionY = y + (page.categories.size() == 1 ? 16 : 64);
+
+ // Category buttons
+ int buttonX = x + 16;
+ for (BasicButton button : categories) {
+ if (button.getWidth() == 0)
+ button.setWidth((int) (Math.ceil(RenderManager.getTextWidth(vg, button.getText(), 14f, Fonts.INTER_MEDIUM) / 8f) * 8 + 16));
+ button.draw(vg, buttonX, y + 16);
+ buttonX += button.getWidth() + 16;
+ }
+
+ // Top page buttons
+ for (ConfigPageButton page : page.categories.get(selectedCategory).topPages) {
+ page.draw(vg, optionX, optionY);
+ optionY += page.getHeight() + 16;
+ }
+
+ // Background
+ if (page.categories.get(selectedCategory).subcategories.keySet().size() > 0) {
+ int backgroundSize = 16;
+ for (String subCategory : page.categories.get(selectedCategory).subcategories.keySet()) {
+ backgroundSize += 48;
+ for (int i = 0; i < page.categories.get(selectedCategory).subcategories.get(subCategory).size(); i++) {
+ BasicOption option = page.categories.get(selectedCategory).subcategories.get(subCategory).get(i);
+ if (i + 1 < page.categories.get(selectedCategory).subcategories.get(subCategory).size()) {
+ BasicOption nextOption = page.categories.get(selectedCategory).subcategories.get(subCategory).get(i + 1);
+ if (option.size == 1 && option.hasHalfSize() && nextOption.size == 1 && nextOption.hasHalfSize()) {
+ backgroundSize += Math.max(option.getHeight(), nextOption.getHeight()) + 16;
+ i++;
+ continue;
+ }
+ }
+ backgroundSize += option.getHeight() + 16;
+ }
+ }
+ RenderManager.drawRoundedRect(vg, x + 14, optionY, 1024, backgroundSize, OneConfigConfig.GRAY_900, 20);
+ }
+
+ // draw options
+ int optionLastY = optionY + 16;
+ if (page.categories.get(selectedCategory).subcategories.keySet().size() > 0) {
+ optionY += 16;
+ for (String subCategory : page.categories.get(selectedCategory).subcategories.keySet()) {
+ RenderManager.drawString(vg, subCategory, optionX, optionY + 16, OneConfigConfig.WHITE_90, 24f, Fonts.INTER_MEDIUM);
+ optionY += 48;
+ for (int i = 0; i < page.categories.get(selectedCategory).subcategories.get(subCategory).size(); i++) {
+ BasicOption option = page.categories.get(selectedCategory).subcategories.get(subCategory).get(i);
+ option.draw(vg, optionX, optionY);
+ if (i + 1 < page.categories.get(selectedCategory).subcategories.get(subCategory).size()) {
+ BasicOption nextOption = page.categories.get(selectedCategory).subcategories.get(subCategory).get(i + 1);
+ if (option.size == 1 && option.hasHalfSize() && nextOption.size == 1 && nextOption.hasHalfSize()) {
+ nextOption.draw(vg, optionX + 512, optionY);
+ optionY += Math.max(option.getHeight(), nextOption.getHeight()) + 16;
+ i++;
+ continue;
+ }
+ }
+ optionY += option.getHeight() + 16;
+ }
+ }
+ optionY += 16;
+ }
+
+ // Bottom page buttons
+ for (ConfigPageButton page : page.categories.get(selectedCategory).bottomPages) {
+ page.draw(vg, optionX, optionY);
+ optionY += page.getHeight() + 16;
+ }
+
+ // Draw last options
+ if (page.categories.get(selectedCategory).subcategories.keySet().size() > 0) {
+ for (String subCategory : page.categories.get(selectedCategory).subcategories.keySet()) {
+ optionLastY += 48;
+ for (int i = 0; i < page.categories.get(selectedCategory).subcategories.get(subCategory).size(); i++) {
+ BasicOption option = page.categories.get(selectedCategory).subcategories.get(subCategory).get(i);
+ option.drawLast(vg, optionX, optionLastY);
+ if (i + 1 < page.categories.get(selectedCategory).subcategories.get(subCategory).size()) {
+ BasicOption nextOption = page.categories.get(selectedCategory).subcategories.get(subCategory).get(i + 1);
+ if (option.size == 1 && option.hasHalfSize() && nextOption.size == 1 && nextOption.hasHalfSize()) {
+ nextOption.drawLast(vg, optionX + 512, optionLastY);
+ optionLastY += Math.max(option.getHeight(), nextOption.getHeight()) + 16;
+ i++;
+ continue;
+ }
+ }
+ optionLastY += option.getHeight() + 16;
+ }
+ }
+ }
+ }
+
+ @Override
+ public void finishUpAndClose() {
+ page.mod.config.save();
+ }
+
+ @Override
+ public void keyTyped(char key, int keyCode) {
+ if (page.categories.size() == 0) return;
+ for (String subCategory : page.categories.get(selectedCategory).subcategories.keySet()) {
+ for (int i = 0; i < page.categories.get(selectedCategory).subcategories.get(subCategory).size(); i++) {
+ page.categories.get(selectedCategory).subcategories.get(subCategory).get(i).keyTyped(key, keyCode);
+ }
+ }
+ }
+
+ public void switchCategory(String newCategory) {
+ if (!page.categories.containsKey(newCategory)) return;
+ selectedCategory = newCategory;
+ for (BasicButton button : categories) {
+ if (button.getText().equals(newCategory)) continue;
+ button.setToggled(false);
+ }
+ }
+}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java
new file mode 100644
index 0000000..bb9cbd6
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java
@@ -0,0 +1,76 @@
+package cc.polyfrost.oneconfig.gui.pages;
+
+import cc.polyfrost.oneconfig.OneConfig;
+import cc.polyfrost.oneconfig.config.OneConfigConfig;
+import cc.polyfrost.oneconfig.config.data.Mod;
+import cc.polyfrost.oneconfig.config.data.ModType;
+import cc.polyfrost.oneconfig.gui.elements.BasicButton;
+import cc.polyfrost.oneconfig.lwjgl.font.Fonts;
+import cc.polyfrost.oneconfig.gui.elements.ModCard;
+import cc.polyfrost.oneconfig.lwjgl.RenderManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ModsPage extends Page {
+
+ private final List<ModCard> modCards = new ArrayList<>();
+ private final List<BasicButton> modCategories = new ArrayList<>();
+
+ public ModsPage() {
+ super("Mods");
+ for (Mod modData : OneConfig.loadedMods) {
+ modCards.add(new ModCard(modData, null, true, false, false));
+ }
+ for (ModCard card : modCards) {
+ if (card.isFavorite()) {
+ modCards.remove(card);
+ modCards.add(0, card);
+ }
+ }
+ modCategories.add(new BasicButton(64, 32, "All", null, null, 0, BasicButton.ALIGNMENT_CENTER, true, () -> unselect(0)));
+ modCategories.add(new BasicButton(80, 32, "Combat", null, null, 0, BasicButton.ALIGNMENT_CENTER, true, () -> unselect(1)));
+ modCategories.add(new BasicButton(64, 32, "HUD", null, null, 0, BasicButton.ALIGNMENT_CENTER, true, () -> unselect(2)));
+ modCategories.add(new BasicButton(104, 32, "Utility & QoL", null, null, 0, BasicButton.ALIGNMENT_CENTER, true, () -> unselect(3)));
+ modCategories.add(new BasicButton(80, 32, "Hypixel", null, null, 0, BasicButton.ALIGNMENT_CENTER, true, () -> unselect(4)));
+ modCategories.add(new BasicButton(80, 32, "Skyblock", null, null, 0, BasicButton.ALIGNMENT_CENTER, true, () -> unselect(5)));
+ modCategories.add(new BasicButton(88, 32, "3rd Party", null, null, 0, BasicButton.ALIGNMENT_CENTER, true, () -> unselect(6)));
+ modCategories.get(0).setToggled(true);
+ }
+
+ public void draw(long vg, int x, int y) {
+ int iXCat = x + 16;
+ for (BasicButton btn : modCategories) {
+ btn.draw(vg, iXCat, y + 16);
+ iXCat += btn.getWidth() + 8;
+ }
+
+ int iX = x + 16;
+ int iY = y + 72;
+ for (ModCard modCard : modCards) {
+ if (modCategories.get(0).isToggled() || (modCategories.get(1).isToggled() && modCard.getModData().modType == ModType.PVP) || (modCategories.get(2).isToggled() && modCard.getModData().modType == ModType.HUD) || (modCategories.get(3).isToggled() && modCard.getModData().modType == ModType.UTIL_QOL) || (modCategories.get(4).isToggled() && modCard.getModData().modType == ModType.HYPIXEL) || (modCategories.get(5).isToggled() && modCard.getModData().modType == ModType.SKYBLOCK) || (modCategories.get(6).isToggled() && modCard.getModData().modType == ModType.OTHER)) {
+ modCard.draw(vg, iX, iY);
+ iX += 260;
+ if (iX > x + 796) {
+ iX = x + 16;
+ iY += 135;
+ }
+ }
+ }
+ if (iX == x + 16 && iY == y + 72) {
+ RenderManager.drawString(vg, "Looks like there is nothing here. Try another category?", x + 16, y + 72, OneConfigConfig.WHITE_60, 14f, Fonts.INTER_MEDIUM);
+ }
+ }
+
+ private void unselect(int index) {
+ for (int i = 0; i < modCategories.size(); i++) {
+ if (index == i) continue;
+ modCategories.get(i).setToggled(false);
+ }
+ }
+
+ @Override
+ public boolean isBase() {
+ return true;
+ }
+}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java
new file mode 100644
index 0000000..ba31fa8
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java
@@ -0,0 +1,31 @@
+package cc.polyfrost.oneconfig.gui.pages;
+
+/**
+ * A page is a 1056x728 rectangle of the GUI. It is the main content of the gui, and can be switched back and forwards easily. All the content of OneConfig is in a page.
+ */
+public abstract class Page {
+ protected final String title;
+
+ Page(String title) {
+ this.title = title;
+ }
+
+ public abstract void draw(long vg, int x, int y);
+
+ public void finishUpAndClose() {
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void keyTyped(char key, int keyCode) {
+ }
+
+ /**
+ * Overwrite this method and make it return true if you want this to always be the base in breadcrumbs
+ */
+ public boolean isBase() {
+ return false;
+ }
+}