diff options
| author | syeyoung <cyoung06@naver.com> | 2023-01-18 17:08:17 +0900 |
|---|---|---|
| committer | syeyoung <cyoung06@naver.com> | 2023-01-18 17:09:19 +0900 |
| commit | eac86380ed0db7be002e55d850ca7fea4b698c4d (patch) | |
| tree | 7db6fca1e8bbe90361b9b114730ba4a5148e218c | |
| parent | 470585150a1f2a506215e17bc9b9871bfdd80aa6 (diff) | |
| download | Skyblock-Dungeons-Guide-eac86380ed0db7be002e55d850ca7fea4b698c4d.tar.gz Skyblock-Dungeons-Guide-eac86380ed0db7be002e55d850ca7fea4b698c4d.tar.bz2 Skyblock-Dungeons-Guide-eac86380ed0db7be002e55d850ca7fea4b698c4d.zip | |
- upgrade mechanic browser to use guiv2
- also add #134
Signed-off-by: syeyoung <cyoung06@naver.com>
52 files changed, 938 insertions, 643 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java index 48e515bb..91b87969 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java @@ -24,20 +24,29 @@ import kr.syeyoung.dungeonsguide.mod.SkyblockStatus; import kr.syeyoung.dungeonsguide.mod.config.guiconfig.location.GuiGuiLocationConfig; import kr.syeyoung.dungeonsguide.mod.config.types.GUIRectangle; import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext; +import kr.syeyoung.dungeonsguide.mod.dungeon.actions.tree.ActionRoute; import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom; import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.GeneralRoomProcessor; import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler; +import kr.syeyoung.dungeonsguide.mod.events.impl.DGTickEvent; import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter; import kr.syeyoung.dungeonsguide.mod.features.GuiFeature; +import kr.syeyoung.dungeonsguide.mod.features.impl.secret.mechanicbrowser.v2.WidgetMechanicBrowser; import kr.syeyoung.dungeonsguide.mod.gui.MPanel; import kr.syeyoung.dungeonsguide.mod.gui.elements.MFloatSelectionButton; import kr.syeyoung.dungeonsguide.mod.gui.elements.MPassiveLabelAndElement; +import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Rect; +import kr.syeyoung.dungeonsguide.mod.overlay.OverlayManager; +import kr.syeyoung.dungeonsguide.mod.overlay.OverlayType; +import kr.syeyoung.dungeonsguide.mod.overlay.OverlayWidget; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiChat; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.MathHelper; +import net.minecraftforge.client.event.GuiOpenEvent; import net.minecraftforge.client.event.GuiScreenEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderWorldLastEvent; @@ -48,27 +57,29 @@ import org.lwjgl.opengl.GL14; import java.awt.*; import java.io.IOException; import java.util.List; +import java.util.Objects; import java.util.Optional; +import java.util.UUID; public class FeatureMechanicBrowse extends GuiFeature { + + private OverlayWidget lastOpen; + private OverlayWidget widget; + private WidgetMechanicBrowser mechanicBrowser; + public FeatureMechanicBrowse() { super("Dungeon.Secrets.Secret Browser","Secret Browser", "Browse and Pathfind secrets and mechanics in the current room", "secret.mechanicbrowse", false, 100, 300); addParameter("scale", new FeatureParameter<Float>("scale", "Scale", "Scale", 1.0f, "float")); - mGuiMechanicBrowser = new MGuiMechanicBrowser(this); - mGuiMechanicBrowser.setWorldAndResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight); - lastWidth = Minecraft.getMinecraft().displayWidth; lastHeight = Minecraft.getMinecraft().displayHeight; } public double getScale() { return this.<Float>getParameter("scale").getValue(); } - private MGuiMechanicBrowser mGuiMechanicBrowser; @Override public void drawDemo(float partialTicks) { - super.drawDemo(partialTicks); double scale = FeatureMechanicBrowse.this.<Float>getParameter("scale").getValue(); GlStateManager.scale(scale, scale, 1.0); @@ -86,44 +97,59 @@ public class FeatureMechanicBrowse extends GuiFeature { fr.drawString("Open Chat to Select Secrets", 2, fr.FONT_HEIGHT + 5, 0xFFAAAAAA); } - private int lastWidth, lastHeight; - @Override - public void drawScreen(float partialTicks) { - - int i = Mouse.getEventX(); - int j = Minecraft.getMinecraft().displayHeight - Mouse.getEventY(); - if (Minecraft.getMinecraft().displayWidth != lastWidth || Minecraft.getMinecraft().displayHeight != lastHeight) mGuiMechanicBrowser.initGui(); - lastWidth = Minecraft.getMinecraft().displayWidth; lastHeight = Minecraft.getMinecraft().displayHeight; - mGuiMechanicBrowser.drawScreen(i,j,partialTicks); - } + public void drawHUD(float partialTicks) { + SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus(); + if (!skyblockStatus.isOnDungeon()) return; + if (DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext() == null || !DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getMapProcessor().isInitialized()) return; + DungeonContext context = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext(); - @Override - public void setFeatureRect(GUIRectangle featureRect) { - super.setFeatureRect(featureRect); - mGuiMechanicBrowser.initGui(); - } + 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; + GeneralRoomProcessor grp = (GeneralRoomProcessor) dungeonRoom.getRoomProcessor(); - @Override - public void drawHUD(float partialTicks) { } + double scale = FeatureMechanicBrowse.this.<Float>getParameter("scale").getValue(); + GlStateManager.scale(scale, scale, 1.0); + + Dimension bigDim = getFeatureRect().getRectangleNoScale().getSize(); + Dimension effectiveDim = new Dimension((int) (bigDim.width / scale),(int)( bigDim.height / scale)); + + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + Gui.drawRect(0, 0, effectiveDim.width, fr.FONT_HEIGHT + 4, 0xFF444444); + Gui.drawRect(1, 1, effectiveDim.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("MECH-BROWSER") == null) + fr.drawString("Nothing", fr.getStringWidth("Selected: ") + 2,2, 0xFFAA0000); + else { + ActionRoute route = grp.getPath("MECH-BROWSER"); + fr.drawString(route.getMechanic()+" -> "+route.getState(), fr.getStringWidth("Selected: ") + 2,2, 0xFFFFFF00); + } + fr.drawString("Open Chat to Select Secrets", 2, fr.FONT_HEIGHT + 5, 0xFFAAAAAA); + } @DGEventHandler public void onMouseInput(GuiScreenEvent.MouseInputEvent.Pre mouseInputEvent) { - - try { - mGuiMechanicBrowser.handleMouseInput(); - } catch (IOException e) { - e.printStackTrace(); - } +// +// try { +// mGuiMechanicBrowser.handleMouseInput(); +// } catch (IOException e) { +// e.printStackTrace(); +// } } @DGEventHandler public void onGuiPreRender(GuiScreenEvent.DrawScreenEvent.Pre rendered) { - - int i = Mouse.getEventX(); - int j = Minecraft.getMinecraft().displayHeight - Mouse.getEventY(); - mGuiMechanicBrowser.drawScreen(i, j, rendered.renderPartialTicks); +// +// int i = Mouse.getEventX(); +// int j = Minecraft.getMinecraft().displayHeight - Mouse.getEventY(); +// mGuiMechanicBrowser.drawScreen(i, j, rendered.renderPartialTicks); } @DGEventHandler @@ -140,9 +166,9 @@ public class FeatureMechanicBrowse extends GuiFeature { DungeonRoom dungeonRoom = context.getRoomMapper().get(roomPt); if (dungeonRoom == null) return; if (!(dungeonRoom.getRoomProcessor() instanceof GeneralRoomProcessor)) return; - String id = mGuiMechanicBrowser.getPanelMechanicBrowser().getSelectedID(); + String id = mechanicBrowser.getSelectedId(); if (id != null) { - Optional.ofNullable(dungeonRoom.getMechanics().get(mGuiMechanicBrowser.getPanelMechanicBrowser().getSelectedID())) + Optional.ofNullable(dungeonRoom.getMechanics().get(mechanicBrowser.getSelectedId())) .ifPresent(a -> { a.highlight(new Color(0,255,255,50), id +" ("+( dungeonRoom.getMechanics().get(id).getRepresentingPoint(dungeonRoom) != null ? @@ -158,10 +184,54 @@ public class FeatureMechanicBrowse extends GuiFeature { mPanels.add(new MPassiveLabelAndElement("Scale", new MFloatSelectionButton(FeatureMechanicBrowse.this.<Float>getParameter("scale").getValue()) {{ setOnUpdate(() ->{ FeatureMechanicBrowse.this.<Float>getParameter("scale").setValue(this.getData()); - mGuiMechanicBrowser.initGui(); }); } })); return mPanels; } + + @DGEventHandler + public void onOpen(GuiOpenEvent event) { + if (event.gui instanceof GuiChat) { + if (widget != null) + OverlayManager.getInstance().addOverlay(lastOpen = widget); + } else { + if (lastOpen != null) + OverlayManager.getInstance().removeOverlay(lastOpen); + lastOpen = null; + } + } + + + private UUID lastRoomUid = null; + @DGEventHandler + public void onTick(DGTickEvent event) { + Optional<DungeonRoom> dungeonRoomOpt = Optional.ofNullable(DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext()) + .map(DungeonContext::getMapProcessor).map(a->a.worldPointToRoomPoint(Minecraft.getMinecraft().thePlayer.getPosition())) + .map(a -> { + return DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getRoomMapper().get(a); + }); + UUID currentUID = dungeonRoomOpt.map(a -> a.getDungeonRoomInfo().getUuid()).orElse(null); + // Event-ify above this. + + if (!Objects.equals(lastRoomUid, currentUID)) { + if (currentUID == null) { + mechanicBrowser = null; + widget = null; + } else { + if (lastOpen != null) + OverlayManager.getInstance().removeOverlay(lastOpen); + widget = new OverlayWidget( + mechanicBrowser = new WidgetMechanicBrowser(dungeonRoomOpt.get()), + OverlayType.OVER_CHAT, + () -> { + Rectangle loc = getFeatureRect().getRectangleNoScale(); + return new Rect(loc.x, loc.y, loc.width, loc.height); + }); + } + } + if (mechanicBrowser != null) + mechanicBrowser.update(); + lastRoomUid = currentUID; + } } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MGuiMechanicBrowser.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MGuiMechanicBrowser.java deleted file mode 100644 index d7d69e0a..00000000 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MGuiMechanicBrowser.java +++ /dev/null @@ -1,45 +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.mod.features.impl.secret.mechanicbrowser; - -import kr.syeyoung.dungeonsguide.mod.gui.MGui; -import lombok.Getter; - -public class MGuiMechanicBrowser extends MGui { - private FeatureMechanicBrowse featureMechanicBrowse; - @Getter - private PanelMechanicBrowser panelMechanicBrowser; - public MGuiMechanicBrowser(FeatureMechanicBrowse mechanicBrowse) { - this.featureMechanicBrowse = mechanicBrowse; - panelMechanicBrowser = new PanelMechanicBrowser(mechanicBrowse); - getMainPanel().add(panelMechanicBrowser); - } - - @Override - public void initGui() { - super.initGui(); - panelMechanicBrowser.setBounds(featureMechanicBrowse.getFeatureRect().getRectangle()); - panelMechanicBrowser.setScale(featureMechanicBrowse.getScale()); - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - super.drawScreen(mouseX, mouseY, partialTicks); - } -} diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MechanicBrowserElement.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MechanicBrowserElement.java deleted file mode 100644 index 7ed916c0..00000000 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MechanicBrowserElement.java +++ /dev/null @@ -1,62 +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.mod.features.impl.secret.mechanicbrowser; - - -import kr.syeyoung.dungeonsguide.mod.gui.MPanel; -import kr.syeyoung.dungeonsguide.mod.utils.cursor.EnumCursor; -import lombok.AllArgsConstructor; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; - -import java.awt.*; -import java.util.function.BiConsumer; -import java.util.function.Supplier; - -@AllArgsConstructor -public class MechanicBrowserElement extends MPanel { - private Supplier<String> name; - private boolean isCategory = false; - private BiConsumer<MechanicBrowserElement, Point> onClick; - @Override - public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { - if (isCategory || isFocused) - Gui.drawRect(0, 0, bounds.width, bounds.height, 0xFF444444); - else if (lastAbsClip.contains(absMousex, absMousey)) - Gui.drawRect(0, 0, bounds.width, bounds.height, 0xFF555555); - Minecraft.getMinecraft().fontRendererObj.drawString((String)name.get(), 4, 1, 0xFFEEEEEE); - } - - @Override - public Dimension getPreferredSize() { - return new Dimension(Minecraft.getMinecraft().fontRendererObj.getStringWidth(name.get()) + 8, Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT); - } - - @Override - public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) { - if (lastAbsClip.contains(absMouseX, absMouseY) && onClick != null) - onClick.accept(this, new Point(lastParentPoint.x + bounds.x, lastParentPoint.y + bounds.y)); - } - - @Override - public void mouseMoved(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0) { - if (lastAbsClip.contains(absMouseX, absMouseY) && onClick != null) - setCursor(EnumCursor.POINTING_HAND); - } -} diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MechanicBrowserTooltip.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MechanicBrowserTooltip.java deleted file mode 100644 index 87b100a5..00000000 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MechanicBrowserTooltip.java +++ /dev/null @@ -1,68 +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.mod.features.impl.secret.mechanicbrowser; - -import kr.syeyoung.dungeonsguide.mod.gui.elements.MList; -import kr.syeyoung.dungeonsguide.mod.gui.elements.MTooltip; -import lombok.Getter; -import net.minecraft.client.gui.Gui; - -import java.awt.*; - -public class MechanicBrowserTooltip extends MTooltip { - @Getter - private MList mList; - public MechanicBrowserTooltip() { - mList = new MList(); - mList.setGap(0); - add(mList); - } - - @Override - public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { - Dimension effectiveDim = getEffectiveDimension(); - Gui.drawRect(0, 0, effectiveDim.width, effectiveDim.height, 0xFF444444); - Gui.drawRect(1, 1, effectiveDim.width - 1, effectiveDim.height - 1, 0xFF262626); - } - - @Override - public void setBounds(Rectangle bounds) { - super.setBounds(bounds); - mList.setBounds(new Rectangle(1,1, getEffectiveDimension().width-2, getEffectiveDimension().height-2)); - mList.realignChildren(); - } - - @Override - public void setScale(double scale) { - super.setScale(scale); - mList.setBounds(new Rectangle(1,1, getEffectiveDimension().width-2, getEffectiveDimension().height-2)); - mList.realignChildren(); - } - - @Override - public Dimension getPreferredSize() { - Dimension dim = mList.getPreferredSize(); - return new Dimension((int) ((dim.width + 2) * getScale()), (int) ((dim.height + 2) * getScale())); - } - - @Override - public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) { - if (!lastAbsClip.contains(absMouseX, absMouseY)) close(); - } -} diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/PanelMechanicBrowser.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/PanelMechanicBrowser.java deleted file mode 100644 index |
