aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyeyoung <cyong06@naver.com>2021-08-05 12:35:15 +0900
committersyeyoung <cyong06@naver.com>2021-08-05 12:46:35 +0900
commitf10046f075efd7e17336a7b4629d446283b5c953 (patch)
tree09949c1dbf309c66fbfbde6765b0da4a8ebbdf7b /src
parent468463272411cec70554aed1c96a60beea38f14a (diff)
downloadSkyblock-Dungeons-Guide-f10046f075efd7e17336a7b4629d446283b5c953.tar.gz
Skyblock-Dungeons-Guide-f10046f075efd7e17336a7b4629d446283b5c953.tar.bz2
Skyblock-Dungeons-Guide-f10046f075efd7e17336a7b4629d446283b5c953.zip
- Remove GlStateManager.pushAttrib, which causes .... a lot of problems
= Black screen hopefully fixed? - Mechanic Browser Rewrite
Diffstat (limited to 'src')
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java3
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java4
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonMap.java4
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/FeatureViewPlayerOnJoin.java4
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureMechanicBrowse.java466
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java188
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/MGuiMechanicBrowser.java45
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/MechanicBrowserElement.java65
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/MechanicBrowserTooltip.java68
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/PanelMechanicBrowser.java326
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java6
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java11
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MCollapsable.java4
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPanelScaledGUI.java20
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTooltip.java19
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/party/PartyInviteViewer.java4
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/ActionTreeDisplayPane.java12
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBlazeSolver.java8
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/utils/GlStateUtils.java69
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/utils/RenderUtils.java24
20 files changed, 816 insertions, 534 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java b/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java
index c5bff650..ee81ee2f 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java
@@ -32,12 +32,11 @@ import kr.syeyoung.dungeonsguide.features.impl.dungeon.*;
import kr.syeyoung.dungeonsguide.features.impl.etc.*;
import kr.syeyoung.dungeonsguide.features.impl.etc.ability.FeatureAbilityCooldown;
import kr.syeyoung.dungeonsguide.features.impl.party.APIKey;
-import kr.syeyoung.dungeonsguide.features.impl.party.FeatureGoodParties;
import kr.syeyoung.dungeonsguide.features.impl.party.customgui.FeatureCustomPartyFinder;
import kr.syeyoung.dungeonsguide.features.impl.party.playerpreview.FeatureViewPlayerOnJoin;
import kr.syeyoung.dungeonsguide.features.impl.secret.FeatureActions;
import kr.syeyoung.dungeonsguide.features.impl.secret.FeatureFreezePathfind;
-import kr.syeyoung.dungeonsguide.features.impl.secret.FeatureMechanicBrowse;
+import kr.syeyoung.dungeonsguide.features.impl.secret.mechanicbrowser.FeatureMechanicBrowse;
import kr.syeyoung.dungeonsguide.features.impl.secret.FeatureSoulRoomWarning;
import lombok.Getter;
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java b/src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java
index 396d244d..52278f6b 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java
@@ -65,7 +65,7 @@ public abstract class GuiFeature extends AbstractFeature implements ScreenRender
@Override
public void drawScreen(float partialTicks) {
if (!isEnabled()) return;
- GlStateManager.pushAttrib();
+
GlStateManager.pushMatrix();
Rectangle featureRect = this.featureRect.getRectangleNoScale();
ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
@@ -78,7 +78,7 @@ public abstract class GuiFeature extends AbstractFeature implements ScreenRender
GL11.glDisable(GL11.GL_SCISSOR_TEST);
GlStateManager.popMatrix();
- GlStateManager.popAttrib();
+
GlStateManager.enableBlend();
GlStateManager.color(1,1,1,1);
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonMap.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonMap.java
index f206c092..e5d41de3 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonMap.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonMap.java
@@ -189,7 +189,7 @@ public class FeatureDungeonMap extends GuiFeature implements DungeonEndListener,
if (this.<Boolean>getParameter("showtotalsecrets").getValue()) {
for (DungeonRoom dungeonRoom : context.getDungeonRoomList()) {
GlStateManager.pushMatrix();
- GlStateManager.pushAttrib();
+
Point mapPt = mapProcessor.roomPointToMapPoint(dungeonRoom.getUnitPoints().get(0));
GlStateManager.translate(mapPt.x + mapProcessor.getUnitRoomDimension().width / 2, mapPt.y + mapProcessor.getUnitRoomDimension().height / 2, 0);
@@ -218,7 +218,7 @@ public class FeatureDungeonMap extends GuiFeature implements DungeonEndListener,
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(str, -(fr.getStringWidth(str) / 2), -(fr.FONT_HEIGHT / 2), dungeonRoom.getCurrentState() == DungeonRoom.RoomState.FINISHED ? 0xFF00FF00 : (dungeonRoom.getColor() == 74 ? 0xff000000 : 0xFFFFFFFF));
- GlStateManager.popAttrib();
+
GlStateManager.popMatrix();
}
}
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 f74834e7..4d523e1e 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
@@ -348,7 +348,7 @@ public class FeatureViewPlayerOnJoin extends SimpleFeature implements GuiPostRen
int ry = relY - startY;
- GlStateManager.pushAttrib();
+
GlStateManager.disableRescaleNormal();
RenderHelper.enableGUIStandardItemLighting();
GlStateManager.disableLighting();
@@ -364,7 +364,7 @@ public class FeatureViewPlayerOnJoin extends SimpleFeature implements GuiPostRen
Minecraft.getMinecraft().getRenderItem().renderItemAndEffectIntoGUI(playerProfile.get().getInventory()[(i+9) % 36], (i%9) * 18+1,(i/9) * 18+1);
}
- GlStateManager.popAttrib();
+
if (toHover != null) {
List<String> list = toHover.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips);
for (int i = 0; i < list.size(); ++i) {
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
deleted file mode 100644
index 5bd37c62..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureMechanicBrowse.java
+++ /dev/null
@@ -1,466 +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.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.location.GuiGuiLocationConfig;
-import kr.syeyoung.dungeonsguide.config.types.AColor;
-import kr.syeyoung.dungeonsguide.dungeon.DungeonContext;
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.mechanics.*;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.features.FeatureParameter;
-import kr.syeyoung.dungeonsguide.features.GuiFeature;
-import kr.syeyoung.dungeonsguide.features.listener.GuiClickListener;
-import kr.syeyoung.dungeonsguide.features.listener.GuiPreRenderListener;
-import kr.syeyoung.dungeonsguide.features.listener.WorldRenderListener;
-import kr.syeyoung.dungeonsguide.roomedit.gui.GuiDungeonAddSet;
-import kr.syeyoung.dungeonsguide.roomedit.gui.GuiDungeonParameterEdit;
-import kr.syeyoung.dungeonsguide.roomedit.gui.GuiDungeonRoomEdit;
-import kr.syeyoung.dungeonsguide.roomedit.gui.GuiDungeonValueEdit;
-import kr.syeyoung.dungeonsguide.roomprocessor.GeneralRoomProcessor;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.entity.EntityPlayerSP;
-import net.minecraft.client.gui.*;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.client.renderer.GlStateManager;
-import net.minecraft.util.MathHelper;
-import net.minecraftforge.client.event.GuiScreenEvent;
-import org.lwjgl.input.Mouse;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL14;
-
-import java.awt.*;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.UUID;
-
-public class FeatureMechanicBrowse extends GuiFeature implements GuiPreRenderListener, GuiClickListener, WorldRenderListener {
- public FeatureMechanicBrowse() {
- super("Dungeon Secret.Secret Pathfind","Secret Browser", "Browse and Pathfind secrets and mechanics in the current room", "secret.mechanicbrowse", false, 100, 300);
- parameters.put("linecolor2", new FeatureParameter<AColor>("linecolor2", "Color", "Color of Pathfind line", new AColor(0xFF00FF00, true), "acolor"));
- parameters.put("linethickness", new FeatureParameter<Float>("linethickness", "Thickness", "Thickness of Pathfind line", 1.0f, "float"));
- parameters.put("refreshrate", new FeatureParameter<Integer>("refreshrate", "Line Refreshrate", "How many ticks per line refresh?", 10, "integer"));
- }
-
- public AColor getColor() {
- return this.<AColor>getParameter("linecolor2").getValue();
- }
- public float getThickness() {
- return this.<Float>getParameter("linethickness").getValue();
- }
- public int getRefreshRate() {
- return this.<Integer>getParameter("refreshrate").getValue();
- }
-
- SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private UUID lastRoomUID = null;
- @Override
- public void drawHUD(float partialTicks) {
- if (Minecraft.getMinecraft().currentScreen != null && !(Minecraft.getMinecraft().currentScreen instanceof GuiGuiLocationConfig
- || Minecraft.getMinecraft().currentScreen instanceof GuiDungeonRoomEdit
- || Minecraft.getMinecraft().currentScreen instanceof GuiDungeonAddSet
- || Minecraft.getMinecraft().currentScreen instanceof GuiDungeonParameterEdit
- || Minecraft.getMinecraft().currentScreen instanceof GuiDungeonValueEdit
- || Minecraft.getMinecraft().currentScreen instanceof GuiContainer
- || Minecraft.getMinecraft().currentScreen instanceof GuiIngameMenu)) return;
- if (!skyblockStatus.isOnDungeon()) return;
- if (skyblockStatus.getContext() == null || !skyblockStatus.getContext().getMapProcessor().isInitialized()) return;
- DungeonContext context = skyblockStatus.getContext();
-
- EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
- Point roomPt = context.getMapProcessor().worldPointToRoomPoint(thePlayer.getPosition());
- DungeonRoom dungeonRoom = context.getRoomMapper().get(roomPt);
- if (dungeonRoom == null) return;
- if (!dungeonRoom.getDungeonRoomInfo().getUuid().equals(lastRoomUID)) {
- selected = -1;
- selectedState = -1;
- dy = 0;
- }
- lastRoomUID = dungeonRoom.getDungeonRoomInfo().getUuid();
-
- if (!(dungeonRoom.getRoomProcessor() instanceof GeneralRoomProcessor)) return;
-
- GeneralRoomProcessor grp = (GeneralRoomProcessor) dungeonRoom.getRoomProcessor();
-
- Rectangle feature = getFeatureRect().getRectangle();
- FontRenderer fr = getFontRenderer();
-
- Gui.drawRect(0, 0, feature.width, fr.FONT_HEIGHT + 4, 0xFF444444);
- Gui.drawRect(1, 1, feature.width - 1, fr.FONT_HEIGHT + 3, 0xFF262626);
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- fr.drawString("Selected: ", 2,2, 0xFFAAAAAA);
- if (grp.getPath() == null)
- fr.drawString("Nothing", fr.getStringWidth("Selected: ") + 2,2, 0xFFAA0000);
- else {
- ActionRoute route = grp.getPath();
- fr.drawString(route.getMechanic()+" -> "+route.getState(), fr.getStringWidth("Selected: ") + 2,2, 0xFFFFFF00);
- }
- fr.drawString("Open any gui to browse", 2, fr.FONT_HEIGHT + 5, 0xFFAAAAAA);
- }
-
- @Override
- public void drawDemo(float partialTicks) {
- Rectangle feature = getFeatureRect().getRectangle();
- FontRenderer fr = getFontRenderer();
-
- Gui.drawRect(0, 0, feature.width, fr.FONT_HEIGHT + 4, 0xFF444444);
- Gui.drawRect(1, 1, feature.width - 1, fr.FONT_HEIGHT + 3, 0xFF262626);
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- fr.drawString("Selected: ", 2,2, 0xFFAAAAAA);
- fr.drawString("Nothing", fr.getStringWidth("Selected: ") + 2,2, 0xFFAA0000);
- fr.drawString("Open any gui to browse", 2, fr.FONT_HEIGHT + 5, 0xFFAAAAAA);
- }
-
- @Override
- public void onGuiPreRender(GuiScreenEvent.DrawScreenEvent.Pre rendered) {
- if (!isEnabled()) return;
- if (!(Minecraft.getMinecraft().currentScreen instanceof GuiChat)) return;
-
- if (!skyblockStatus.isOnDungeon()) return;
- if (skyblockStatus.getContext() == null || !skyblockStatus.getContext().getMapProcessor().isInitialized()) return;
- DungeonContext context = skyblockStatus.getContext();
-
- EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
- Point roomPt = context.getMapProcessor().worldPointToRoomPoint(thePlayer.getPosition());
- DungeonRoom dungeonRoom = context.getRoomMapper().get(roomPt);
- if (dungeonRoom == null) return;
- if (!(dungeonRoom.getRoomProcessor() instanceof GeneralRoomProcessor)) return;
- int width = Minecraft.getMinecraft().displayWidth;
- int height = Minecraft.getMinecraft().displayHeight;
- int mouseX = Mouse.getX() ;
- int mouseY = height - Mouse.getY() - 1;
- GlStateManager.pushMatrix();
- GlStateManager.enableTexture2D();
- GlStateManager.disableLighting();
- GlStateManager.color(1, 1, 1, 1);
-
- GeneralRoomProcessor grp = (GeneralRoomProcessor) dungeonRoom.getRoomProcessor();
-
- Rectangle feature = getFeatureRect().getRectangle();
- FontRenderer fr = getFontRenderer();
- GlStateManager.translate(feature.x, feature.y, 0);
- Gui.drawRect(0, 0, feature.width, fr.FONT_HEIGHT + 4, 0xFF444444);
- Gui.drawRect(1, 1, feature.width - 1, fr.FONT_HEIGHT + 3, 0xFF262626);
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- fr.drawString("Selected: ", 2,2, 0xFFAAAAAA);
- if (grp.getPath() == null)
- fr.drawString("Nothing", fr.getStringWidth("Selected: ") + 2,2, 0xFFAA0000);
- else {
- ActionRoute route = grp.getPath();
- fr.drawString(route.getMechanic()+" -> "+route.getState(), fr.getStringWidth("Selected: ") + 2,2, 0xFFFFFF00);
- }
- GlStateManager.translate(0, fr.FONT_HEIGHT + 4, 0);
- Gui.drawRect(0, 0, feature.width, feature.height - fr.FONT_HEIGHT - 4, 0xFF444444);
- Gui.drawRect(1, 1, feature.width - 1,feature.height - fr.FONT_HEIGHT - 5, 0xFF262626);
- clip(new ScaledResolution(Minecraft.getMinecraft()), feature.x, feature.y + fr.FONT_HEIGHT + 5, feature.width , feature.height - fr.FONT_HEIGHT - 6);
- GL11.glEnable(GL11.GL_SCISSOR_TEST);
- GlStateManager.translate(0, -dy, 0);
-
- GlStateManager.pushMatrix();
- GlStateManager.translate(2,2, 0);
- setupMechanics();
- for (int i = 0; i < sortedMechanics.size(); i++) {
- Object obj = sortedMechanics.get(i);
- if (selected == i) {
- Gui.drawRect(-1, i * fr.FONT_HEIGHT, feature.width - 3, i * fr.FONT_HEIGHT + fr.FONT_HEIGHT - 1, 0xFF444444);
- } else if (new Rectangle(feature.x, feature.y + fr.FONT_HEIGHT + 6 - dy + i * fr.FONT_HEIGHT, feature.width, fr.FONT_HEIGHT).contains(mouseX, mouseY)) {
- Gui.drawRect(-1, i * fr.FONT_HEIGHT, feature.width - 3, i * fr.FONT_HEIGHT + fr.FONT_HEIGHT - 1, 0xFF555555);
- }
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- if (obj instanceof DungeonMechanic) {
- String name = sortedMechanicsName.get(i);
- fr.drawString(name, 3, i * fr.FONT_HEIGHT, 0xFFFFFF00);
- fr.drawString(" ("+ ((DungeonMechanic) obj).getCurrentState(dungeonRoom) +", "+
- (((DungeonMechanic) obj).getRepresentingPoint(dungeonRoom) != null ?
- String.format("%.1f", MathHelper.sqrt_double(((DungeonMechanic) obj).getRepresentingPoint(dungeonRoom).getBlockPos(dungeonRoom).distanceSq(Minecraft.getMinecraft().thePlayer.getPosition()))) : "")
- +"m)",fr.getStringWidth(name) + 3, i * fr.FONT_HEIGHT, 0xFFAAAAAA);
- } else if ("$SPECIAL-CANCEL".equals(obj)) {
- fr.drawString("Cancel Current", 3, i * fr.FONT_HEIGHT, 0xFF00FFFF);
- } else {
- Gui.drawRect(-1, i * fr.FONT_HEIGHT, feature.width - 3, i * fr.FONT_HEIGHT + fr.FONT_HEIGHT - 1, 0xFF444444);
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- fr.drawString((String)obj, 3, i * fr.FONT_HEIGHT, 0xFFEEEEEE);
- }
- }
- GlStateManager.popMatrix();
-
- if (selected != -1) {
-
- boolean overFlows = new ScaledResolution(Minecraft.getMinecraft()).getScaledWidth() < feature.x + 2*feature.width;
-
- clip(new ScaledResolution(Minecraft.getMinecraft()), overFlows ? feature.x - feature.width : feature.x + feature.width, feature.y + fr.FONT_HEIGHT + 5, feature.width , feature.height - fr.FONT_HEIGHT - 6);
- GlStateManager.translate(overFlows ? - feature.width : feature.width, selected * fr.FONT_HEIGHT, 0);
- Gui.drawRect(0, 0, feature.width, fr.FONT_HEIGHT * possibleStates.size() + 4, 0xFF444444);
- Gui.drawRect(-1, 1, feature.width - 1, fr.FONT_HEIGHT * possibleStates.size() + 3, 0xFF262626);
- GlStateManager.translate(2,2, 0);
-
- Point popupStart = new Point(overFlows ? feature.x - feature.width : feature.x + feature.width, (selected + 1) * fr.FONT_HEIGHT +6 + feature.y - dy + 2);
- for (int i = 0; i < possibleStates.size(); i++) {
- if (new Rectangle(overFlows ? feature.x - feature.width : feature.x + feature.width, popupStart.y + i * fr.FONT_HEIGHT, feature.width, fr.FONT_HEIGHT).contains(mouseX, mouseY)) {
- Gui.drawRect(-2, i * fr.FONT_HEIGHT, feature.width - 3, i * fr.FONT_HEIGHT + fr.FONT_HEIGHT - 1, 0xFF555555);
- }
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- fr.drawString(possibleStates.get(i), 0, i * fr.FONT_HEIGHT, 0xFFFFFFFF);
- }
- }
- GL11.glDisable(GL11.GL_SCISSOR_TEST);
-
- GlStateManager.popMatrix();
- GlStateManager.enableTexture2D();
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- }
-
- private void clip(ScaledResolution resolution, int x, int y, int width, int height) {
- int scale = resolution.getScaleFactor();
- GL11.glScissor((x ) * scale, Minecraft.getMinecraft().displayHeight - (y + height) * scale, (width) * scale, height * scale);
- }
-
- private int dy = 0;
- private int selected = -1;
- private int selectedState = -1;
- private List<String> possibleStates = new ArrayList<String>();
- private final List<Object> sortedMechanics = new ArrayList<Object>();
- private final List<String> sortedMechanicsName = new ArrayList<String>();
- private void setupMechanics() {
- sortedMechanics.clear();
- sortedMechanicsName.clear();
-
- if (!skyblockStatus.isOnDungeon()) return;
- if (skyblockStatus.getContext() == null || !skyblockStatus.getContext().getMapProcessor().isInitialized()) return;
- DungeonContext context = skyblockStatus.getContext();
-
- EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
- Point roomPt = context.getMapProcessor().worldPointToRoomPoint(thePlayer.getPosition());
- DungeonRoom dungeonRoom = context.getRoomMapper().get(roomPt);
- if (dungeonRoom == null) return;
- if (!(dungeonRoom.getRoomProcessor() instanceof GeneralRoomProcessor)) return;
-
- sortedMechanics.add("$SPECIAL-CANCEL");
- sortedMechanicsName.add("");
-
- boolean found = false;
- for (Map.Entry<String, DungeonMechanic> value : ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).getDungeonRoom().getMechanics().entrySet()) {
- if (value.getValue() instanceof DungeonFairySoul) {
- if (!found) {
- sortedMechanics.add("Fairy Souls");
- sortedMechanicsName.add("");
- found = true;
- }
- sortedMechanics.add(value.getValue());
- sortedMechanicsName.add(value.getKey());
- }
- }
- found = false;
- for (Map.Entry<String, DungeonMechanic> value : ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).getDungeonRoom().getMechanics().entrySet()) {
- if (value.getValue() instanceof DungeonSecret) {
- if (!found) {
- sortedMechanics.add("Secrets");
- sortedMechanicsName.add("");
- found = true;
- }
- sortedMechanics.add(value.getValue());
- sortedMechanicsName.add(value.getKey());
- }
- }
- found = false;
- for (Map.Entry<String, DungeonMechanic> value : ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).getDungeonRoom().getMechanics().entrySet()) {
- if (value.getValue() instanceof DungeonTomb) {
- if (!found) {
- sortedMechanics.add("Crypts");
- sortedMechanicsName.add("");
- found = true;
- }
- sortedMechanics.add(value.getValue());
- sortedMechanicsName.add(value.getKey());
- }
- }
- found = false;
- for (Map.Entry<String, DungeonMechanic> value : ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).getDungeonRoom().getMechanics().entrySet()) {
- if (value.getValue() instanceof DungeonNPC) {
- if (!found) {
- sortedMechanics.add("NPC");
- sortedMechanicsName.add("");
- found = true;
- }
- sortedMechanics.add(value.getValue());
- sortedMechanicsName.add(value.getKey());
- }
- }
- found = false;
- for (Map.Entry<String, DungeonMechanic> value : ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).getDungeonRoom().getMechanics().entrySet()) {
- if (value.getValue() instanceof DungeonJournal) {
- if (!found) {
- sortedMechanics.add("Journals");
- sortedMechanicsName.add("");
- found = true;
- }
- sortedMechanics.add(value.getValue());
- sortedMechanicsName.add(value.getKey());
- }
- }
- found = false;
- for (Map.Entry<String, DungeonMechanic> value : ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).getDungeonRoom().getMechanics().entrySet()) {
- if (value.getValue() instanceof DungeonRoomDoor){
- if (!found) {
- sortedMechanics.add("Gates");
- sortedMechanicsName.add("");
- found = true;
- }
- sortedMechanics.add(value.getValue());
- sortedMechanicsName.add(value.getKey());
- }
- }
- found = false;
- for (Map.Entry<String, DungeonMechanic> value : ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).getDungeonRoom().getMechanics().entrySet()) {
- if (value.getValue() instanceof DungeonDoor || value.getValue() instanceof DungeonBreakableWall || value.getValue() instanceof DungeonLever
- || value.getValue() instanceof DungeonOnewayDoor || value.getValue() instanceof DungeonOnewayLever || value.getValue() instanceof DungeonPressurePlate) {
- if (!found) {
- sortedMechanics.add("ETC");
- sortedMechanicsName.add("");
- found = true;
- }
- sortedMechanics.add(value.getValue());
- sortedMechanicsName.add(value.getKey());
- }
- }
- }
-
- @Override
- public void onMouseInput(GuiScreenEvent.MouseInputEvent.Pre mouseInputEvent) {
- if (!isEnabled()) return;
- if (!(Minecraft.getMinecraft().currentScreen instanceof GuiChat)) return;
-
-
- if (!skyblockStatus.isOnDungeon()) return;
- if (skyblockStatus.getContext() == null || !skyblockStatus.getContext().getMapProcessor().isInitialized()) return;
- DungeonContext context = skyblockStatus.getContext();
-
- EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
- Point roomPt = context.getMapProcessor().worldPointToRoomPoint(thePlayer.getPosition());
- DungeonRoom dungeonRoom = context.getRoomMapper().get(roomPt);
- if (dungeonRoom == null) return;
- if (!(dungeonRoom.getRoomProcessor() instanceof GeneralRoomProcessor)) return;
-
- int width = Minecraft.getMinecraft().displayWidth;
- int height = Minecraft.getMinecraft().displayHeight;
- int mouseX = Mouse.getX();
- int mouseY = height - Mouse.getY() - 1;
-
- Rectangle feature = getFeatureRect().getRectangle();
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- boolean overFlows = new ScaledResolution(Minecraft.getMinecraft()).getScaledWidth() < feature.x + 2*feature.width;
-
- Point popupStart = new Point(overFlows ? feature.x - feature.width : feature.x + feature.width, (selected + 1) * fr.FONT_HEIGHT +6 + feature.y - dy);
- if (feature.contains(mouseX, mouseY)) {
- mouseInputEvent.setCanceled(true);
-
- int wheel = Mouse.getDWheel();
- if (wheel > 0) dy -= fr.FONT_HEIGHT;
- else if (wheel < 0) dy += fr.FONT_HEIGHT;
-
- if (-dy + sortedMechanics.size() * fr.FONT_HEIGHT < feature.height - fr.FONT_HEIGHT - 6) dy = -(feature.height - fr.FONT_HEIGHT - 6) + sortedMechanics.size() * fr.FONT_HEIGHT;
- if (dy < 0) dy = 0;
-
-
- if (Mouse.getEventButton() != -1) {
- int yDiff = mouseY + dy - feature.y - fr.FONT_HEIGHT - 6;
- selected = yDiff / fr.FONT_HEIGHT;
-
- if (selected < 0) selected = -1;
- if (selected >= sortedMechanics.size()) selected = -1;
- if (selected == -1) {
- possibleStates.clear();
- } else if (sortedMechanics.get(selected) instanceof DungeonMechanic){
- possibleStates = Lists.newArrayList(((DungeonMechanic) sortedMechanics.get(selected)).getPossibleStates(dungeonRoom));
- } else if ("$SPECIAL-CANCEL".equals(sortedMechanics.get(selected))) {
- ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).cancel();
- possibleStates.clear();
- selected = -1;
- selectedState = -1;
- } else {
- possibleStates.clear();
- selected = -1;
- selectedState = -1;
- }
- }
- } else if (selected != -1 && sortedMechanics.get(selected) instanceof DungeonMechanic &&
- new Rectangle(popupStart, new Dimension(feature.width, ((DungeonMechanic) sortedMechanics.get(selected)).getPossibleStates(dungeonRoom).size() * fr.FONT_HEIGHT)).contains(mouseX, mouseY)) {
- mouseInputEvent.setCanceled(true);
- if (Mouse.getEventButton() != -1) {
- int yDiff = mouseY - popupStart.y - 2;
- int preSelectedState = yDiff / fr.FONT_HEIGHT ;
- if (preSelectedState < 0) preSelectedState = -1;
- if (preSelectedState >= possibleStates.size()) preSelectedState =
- possibleStates.size() - 1;
-
- if (preSelectedState == selectedState && preSelectedState != -1) {
- ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).pathfind(sortedMechanicsName.get(selected),
- possibleStates.get(selectedState));
- selected = -1;
- selectedState = -1;
- possibleStates.clear();
- }
- selectedState = preSelectedState;
- }
- } else if (Mouse.getEventButton() != -1){
- possibleStates.clear();
- selectedState = -1;
- selected = -1;
- }
- }
-
- @Override
- public void drawWorld(float partialTicks) {
- if (!isEnabled()) return;
- if (!skyblockStatus.isOnDungeon()) return;
- if (skyblockStatus.getContext() == null || !skyblockStatus.getContext().getMapProcessor().isInitialized()) return;
- DungeonContext context = skyblockStatus.getContext();
-
- EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
- Point roomPt = context.getMapProcessor().worldPointToRoomPoint(thePlayer.getPosition());
- DungeonRoom dungeonRoom = context.getRoomMapper().get(roomPt);
- if (dungeonRoom == null) return;
- if (!(dungeonRoom.getRoomProcessor() instanceof GeneralRoomProcessor)) return;
- if (selected != -1) {
- if (sortedMechanics.size() <= selected) return;
- ((DungeonMechanic)sortedMechanics.get(selected)).highlight(new Color(0,255,255,50), sortedMechanicsName.get(selected) +" ("+(((DungeonMechanic)
- sortedMechanics.get(selected)).getRepresentingPoint(dungeonRoom) != null ?
- String.format("%.1f", MathHelper.sqrt_double(((DungeonMechanic) sortedMechanics.get(selected)).getRepresentingPoint(dungeonRoom).getBlockPos(dungeonRoom).distanceSq(Minecraft.getMinecraft().thePlayer.getPosition()))) : "")
- +"m)", dungeonRoom, partialTicks);
- }
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java
new file mode 100644
index 00000000..1eaaa15f
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java
@@ -0,0 +1,188 @@
+/*
+ * 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