diff options
| author | syeyoung <cyoung06@naver.com> | 2023-01-25 16:44:51 +0900 |
|---|---|---|
| committer | syeyoung <cyoung06@naver.com> | 2023-01-25 16:44:51 +0900 |
| commit | d5229dd379372abd83edd1b3db3d1076481248e8 (patch) | |
| tree | 1f397bca4b8fbaeeef298bfec598105488433d9e /mod/src/main/java/kr | |
| parent | 16e09c87114564a192c3d0a3c7e77ec18a330a11 (diff) | |
| download | Skyblock-Dungeons-Guide-d5229dd379372abd83edd1b3db3d1076481248e8.tar.gz Skyblock-Dungeons-Guide-d5229dd379372abd83edd1b3db3d1076481248e8.tar.bz2 Skyblock-Dungeons-Guide-d5229dd379372abd83edd1b3db3d1076481248e8.zip | |
- Follow user's scaled width and height
Signed-off-by: syeyoung <cyoung06@naver.com>
Diffstat (limited to 'mod/src/main/java/kr')
26 files changed, 307 insertions, 93 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java index 2896489f..8e841db7 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java @@ -65,11 +65,6 @@ public abstract class AbstractHUDFeature extends AbstractGuiFeature { this.featureRect = new GUIRectangle(0, 0, width, height); } - - public Rect getWidgetPosition() { - Rectangle loc = featureRect.getRectangleNoScale(); - return new Rect(loc.x, loc.y, loc.width, loc.height); - } public abstract void drawDemo(float partialTicks); @Override diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/RawRenderingGuiFeature.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/RawRenderingGuiFeature.java index 869f6391..04ed126f 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/RawRenderingGuiFeature.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/RawRenderingGuiFeature.java @@ -25,6 +25,7 @@ import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.ConstraintBox; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Size; import kr.syeyoung.dungeonsguide.mod.guiv2.renderer.Renderer; import kr.syeyoung.dungeonsguide.mod.guiv2.renderer.RenderingContext; +import kr.syeyoung.dungeonsguide.mod.overlay.GUIRectanglePositioner; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayType; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayWidget; import lombok.Getter; @@ -64,7 +65,7 @@ public abstract class RawRenderingGuiFeature extends AbstractHUDFeature { return new OverlayWidget( new WidgetFeatureWrapper(), OverlayType.UNDER_CHAT, - this::getWidgetPosition + new GUIRectanglePositioner(this::getFeatureRect) ); } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java index ad656753..ae3f52e8 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java @@ -30,6 +30,7 @@ import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Rect; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayType; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayWidget; +import kr.syeyoung.dungeonsguide.mod.overlay.WholeScreenPositioner; import net.minecraft.client.Minecraft; import java.util.concurrent.ExecutorService; @@ -49,7 +50,7 @@ public class PartyInviteViewer extends AbstractGuiFeature { return new OverlayWidget( partyInviteViewer = new WidgetPartyInviteViewer(), OverlayType.OVER_ANY, - () -> new Rect(0,0,Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight) + new WholeScreenPositioner() ); } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/onlinealarm/PlayingDGAlarm.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/onlinealarm/PlayingDGAlarm.java index 00e1558f..85784814 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/onlinealarm/PlayingDGAlarm.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/onlinealarm/PlayingDGAlarm.java @@ -27,6 +27,7 @@ import kr.syeyoung.dungeonsguide.mod.features.AbstractGuiFeature; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Rect; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayType; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayWidget; +import kr.syeyoung.dungeonsguide.mod.overlay.WholeScreenPositioner; import net.minecraft.client.Minecraft; public class PlayingDGAlarm extends AbstractGuiFeature { @@ -42,7 +43,7 @@ public class PlayingDGAlarm extends AbstractGuiFeature { return new OverlayWidget( onlinePeopleViewer = new WidgetOnlinePeopleViewer(), OverlayType.OVER_ANY, - () -> new Rect(0,0,Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight) + new WholeScreenPositioner() ); } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/FeatureViewPlayerStatsOnJoin.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/FeatureViewPlayerStatsOnJoin.java index c482337e..706b5c28 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/FeatureViewPlayerStatsOnJoin.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/FeatureViewPlayerStatsOnJoin.java @@ -37,9 +37,7 @@ import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.api.ApiFe import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.datarenders.DataRendererEditor; import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.widget.WidgetProfileViewer; 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 kr.syeyoung.dungeonsguide.mod.overlay.*; import kr.syeyoung.dungeonsguide.mod.party.PartyContext; import kr.syeyoung.dungeonsguide.mod.party.PartyManager; import kr.syeyoung.dungeonsguide.mod.utils.TextUtils; @@ -150,7 +148,7 @@ public class FeatureViewPlayerStatsOnJoin extends SimpleFeature { } }), OverlayType.OVER_CHAT, - () -> new Rect(mouseX, mouseY-height, width, height) + new AbsPosPositioner(mouseX, mouseY-height) ); OverlayManager.getInstance().addOverlay(widget); } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/PlayerModelRenderer.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/PlayerModelRenderer.java index 3834f966..0389fb32 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/PlayerModelRenderer.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/PlayerModelRenderer.java @@ -18,33 +18,26 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.widget; -import com.mojang.authlib.GameProfile; import kr.syeyoung.dungeonsguide.mod.DungeonsGuide; import kr.syeyoung.dungeonsguide.mod.cosmetics.ActiveCosmetic; import kr.syeyoung.dungeonsguide.mod.cosmetics.CosmeticData; import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.FakePlayer; -import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.api.playerprofile.PlayerProfile; -import kr.syeyoung.dungeonsguide.mod.guiv2.BindableAttribute; import kr.syeyoung.dungeonsguide.mod.guiv2.DomElement; import kr.syeyoung.dungeonsguide.mod.guiv2.Widget; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.MinecraftTooltip; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.MouseTooltip; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.PopupMgr; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.MinecraftTooltip; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.MouseTooltip; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.PopupMgr; import kr.syeyoung.dungeonsguide.mod.guiv2.layouter.Layouter; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.ConstraintBox; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Size; import kr.syeyoung.dungeonsguide.mod.guiv2.renderer.Renderer; import kr.syeyoung.dungeonsguide.mod.guiv2.renderer.RenderingContext; import kr.syeyoung.dungeonsguide.mod.guiv2.xml.AnnotatedExportOnlyWidget; -import kr.syeyoung.dungeonsguide.mod.guiv2.xml.annotations.Export; -import kr.syeyoung.dungeonsguide.mod.utils.TextUtils; -import lombok.AllArgsConstructor; import lombok.Setter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import org.lwjgl.opengl.GL11; @@ -153,7 +146,7 @@ public class PlayerModelRenderer extends AnnotatedExportOnlyWidget implements La this.tooltip = null; } else if (toHover != null && this.tooltip == null) PopupMgr.getPopupMgr(getDomElement()) - .openPopup(this.tooltip = new MouseTooltip(absMouseX, absMouseY, actualTooltip),(a) -> { + .openPopup(this.tooltip = new MouseTooltip(actualTooltip),(a) -> { this.tooltip = null; }); return false; diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetDataRendererWrapper.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetDataRendererWrapper.java index 636a6f26..4eae8659 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetDataRendererWrapper.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetDataRendererWrapper.java @@ -22,17 +22,14 @@ import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.api.playe import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.datarenders.IDataRenderer; import kr.syeyoung.dungeonsguide.mod.guiv2.DomElement; import kr.syeyoung.dungeonsguide.mod.guiv2.Widget; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.MinecraftTooltip; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.MouseTooltip; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.PopupMgr; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.MinecraftTooltip; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.MouseTooltip; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.PopupMgr; import kr.syeyoung.dungeonsguide.mod.guiv2.layouter.Layouter; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.ConstraintBox; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Size; import kr.syeyoung.dungeonsguide.mod.guiv2.renderer.Renderer; import kr.syeyoung.dungeonsguide.mod.guiv2.renderer.RenderingContext; -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; import java.awt.*; import java.util.Collections; @@ -87,7 +84,7 @@ public class WidgetDataRendererWrapper extends Widget implements Layouter, Rende this.tooltip = null; } else if (toHover != null && this.tooltip == null) PopupMgr.getPopupMgr(getDomElement()) - .openPopup(this.tooltip = new MouseTooltip(absMouseX, absMouseY, actualTooltip), (a) -> { + .openPopup(this.tooltip = new MouseTooltip(actualTooltip), (a) -> { this.tooltip = null; }); return false; diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetPlayerInventory.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetPlayerInventory.java index e32f5754..9f04cfcf 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetPlayerInventory.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetPlayerInventory.java @@ -21,9 +21,9 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.widget; import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.api.playerprofile.PlayerProfile; import kr.syeyoung.dungeonsguide.mod.guiv2.DomElement; import kr.syeyoung.dungeonsguide.mod.guiv2.Widget; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.MinecraftTooltip; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.MouseTooltip; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.PopupMgr; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.MinecraftTooltip; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.MouseTooltip; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.PopupMgr; import kr.syeyoung.dungeonsguide.mod.guiv2.layouter.Layouter; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.ConstraintBox; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Size; @@ -124,7 +124,7 @@ public class WidgetPlayerInventory extends Widget implements Renderer, Layouter this.tooltip = null; } else if (toHover != null && this.tooltip == null) PopupMgr.getPopupMgr(getDomElement()) - .openPopup(this.tooltip = new MouseTooltip(absMouseX, absMouseY, actualTooltip), (a) -> { + .openPopup(this.tooltip = new MouseTooltip(actualTooltip), (a) -> { this.tooltip = null; }); return true; diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetProfileViewerData.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetProfileViewerData.java index 3ba7cbd0..3a3ca61d 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetProfileViewerData.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/widget/WidgetProfileViewerData.java @@ -27,8 +27,8 @@ import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.datarende import kr.syeyoung.dungeonsguide.mod.guiv2.BindableAttribute; import kr.syeyoung.dungeonsguide.mod.guiv2.DomElement; import kr.syeyoung.dungeonsguide.mod.guiv2.Widget; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.LocationedPopup; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.PopupMgr; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.AbsLocationPopup; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.PopupMgr; import kr.syeyoung.dungeonsguide.mod.guiv2.elements.Scaler; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Rect; import kr.syeyoung.dungeonsguide.mod.guiv2.xml.AnnotatedWidget; @@ -101,7 +101,7 @@ public class WidgetProfileViewerData extends AnnotatedWidget { } - private LocationedPopup popup; + private AbsLocationPopup popup; @On(functionName = "openInventory") public void openStates() { Rect abs = inventoryButton.getValue().getAbsBounds(); @@ -115,7 +115,7 @@ public class WidgetProfileViewerData extends AnnotatedWidget { scaler.child.setValue(new WidgetPlayerInventory( playerSkyblockData.getPlayerProfiles()[idx] )); - popupMgr.openPopup(popup = new LocationedPopup(x, y, scaler), (a) -> { + popupMgr.openPopup(popup = new AbsLocationPopup(x, y, scaler, true), (a) -> { this.popup = null; }); } 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 87f28a3c..b5e67a5d 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 @@ -33,7 +33,7 @@ import kr.syeyoung.dungeonsguide.mod.features.RawRenderingGuiFeature; 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.GUIRectanglePositioner; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayManager; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayType; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayWidget; @@ -199,11 +199,7 @@ public class FeatureMechanicBrowse extends RawRenderingGuiFeature { 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); - }); + OverlayType.OVER_CHAT, new GUIRectanglePositioner(this::getFeatureRect)); } } if (mechanicBrowser != null) diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/WidgetSecret.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/WidgetSecret.java index 899f07f9..0642da1b 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/WidgetSecret.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/WidgetSecret.java @@ -21,8 +21,8 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.secret.mechanicbrowser; import kr.syeyoung.dungeonsguide.dungeon.mechanics.dunegonmechanic.DungeonMechanic; import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom; import kr.syeyoung.dungeonsguide.mod.guiv2.BindableAttribute; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.LocationedPopup; -import kr.syeyoung.dungeonsguide.mod.guiv2.elements.PopupMgr; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.AbsLocationPopup; +import kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups.PopupMgr; import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Rect; import kr.syeyoung.dungeonsguide.mod.guiv2.xml.AnnotatedWidget; import kr.syeyoung.dungeonsguide.mod.guiv2.xml.annotations.Bind; @@ -54,14 +54,14 @@ public class WidgetSecret extends AnnotatedWidget { this.onSelect = selectedId; } - private LocationedPopup popup; + private AbsLocationPopup popup; @On(functionName = "toggleStates") public void openStates() { Rect abs = getDomElement().getAbsBounds(); double x = abs.getX() + abs.getWidth(); double y = abs.getY(); - if (x + 120 > Minecraft.getMinecraft().displayWidth) + if (!PopupMgr.getPopupMgr(getDomElement()).getDomElement().getAbsBounds().contains(x + 120 , y)) x = abs.getX() - 120; @@ -69,7 +69,7 @@ public class WidgetSecret extends AnnotatedWidget { if (popup == null) { PopupMgr popupMgr = PopupMgr.getPopupMgr(getDomElement()); - popupMgr.openPopup(popup = new LocationedPopup(x, y, new WidgetStateTooltip(room, mechanic, id)), (val) -> { + popupMgr.openPopup(popup = new AbsLocationPopup(x, y, new WidgetStateTooltip(room, mechanic, id), true), (val) -> { if (val == null) onSelect.accept(null); popup = null; diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java index 34f76728..7debd1f0 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java @@ -38,6 +38,7 @@ import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.BreakWord; import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.RichText; import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan; import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.styles.ParentDelegatingTextStyle; +import kr.syeyoung.dungeonsguide.mod.overlay.GUIRectanglePositioner; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayType; import kr.syeyoung.dungeonsguide.mod.overlay.OverlayWidget; import net.minecraft.client.Minecraft; @@ -50,7 +51,13 @@ public abstract class TextHUDFeature extends AbstractHUDFeature implements Style protected TextHUDFeature(String category, String name, String description, String key, boolean keepRatio, int width, int height) { super(category, name, description, key, keepRatio, width, height); addParameter("textStylesNEW", new FeatureParameter<List<TextStyle>>("textStylesNEW", "", "", new ArrayList<TextStyle>(), "list_textStyle")); - addParameter("alignment", new FeatureParameter<String>("alignment", "Alignment", "Alignment", "LEFT", "string")); + addParameter("alignment", new FeatureParameter<String>("alignment", "Alignment", "Alignment", "LEFT", "string", (change) -> { + richText.setAlign( + change.equals("LEFT") ? RichText.TextAlign.LEFT : + change.equals("CENTER") ? RichText.TextAlign.CENTER : + change.equals("RIGHT") ? RichText.TextAlign.RIGHT : RichText.TextAlign.LEFT + ); + })); addParameter("scale", new FeatureParameter<Float>("scale", "Scale", "Scale", 1.0f, "float")); } @@ -66,7 +73,7 @@ public abstract class TextHUDFeature extends AbstractHUDFeature implements Style @Override public OverlayWidget instantiateWidget() { - return new OverlayWidget(richText, OverlayType.UNDER_CHAT, this::getWidgetPosition); + return new OverlayWidget(richText, OverlayType.UNDER_CHAT, new GUIRectanglePositioner(this::getFeatureRect)); } private Map<String, ParentDelegatingTextStyle> builtTextStyles = new HashMap<>(); diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/LocationedPopup.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/popups/AbsLocationPopup.java index 2ed260ab..06db01e2 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/LocationedPopup.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/popups/AbsLocationPopup.java @@ -16,16 +16,19 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package kr.syeyoung.dungeonsguide.mod.guiv2.elements; +package kr.syeyoung.dungeonsguide.mod.guiv2.elements.popups; import kr.syeyoung.dungeonsguide.mod.guiv2.BindableAttribute; import kr.syeyoung.dungeonsguide.mod.guiv2.DomElement; import kr.syeyoung.dungeonsguide.mod.guiv2.Widget; +import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Rect; +import kr.syeyoung.dungeonsguide.mod.guiv2.xml.AnnotatedImportOnlyWidget; import kr.syeyoung.dungeonsguide.mod.guiv2.xml.AnnotatedWidget; import kr.syeyoung.dungeonsguide.mod.guiv2.xml.annotations.Bind; +import kr.syeyoung.dungeonsguide.mod.guiv2.xml.annotations.Export; import net.minecraft.util.ResourceLocation; -public class LocationedPopup extends AnnotatedWidget { +public class AbsLocationPopup extends AnnotatedImportOnlyWidget { @Bind(variableName = "x") public final BindableAttribute<Double> x = new BindableAttribute<>(Double.class); @Bind(variableName = "y") @@ -34,16 +37,49 @@ public class LocationedPopup extends AnnotatedWidget { public final BindableAttribute<DomElement> ref = new BindableAttribute<>(DomElement.class); @Bind(variableName = "child") public final BindableAttribute<Widget> child = new BindableAttribute<>(Widget.class); - public LocationedPopup(double x, double y, Widget child) { + + public final BindableAttribute<Double> absX = new BindableAttribute<>(Double.class); + public final BindableAttribute<Double> absY = new BindableAttribute<>(Double.class); + public boolean autoclose = false; + public AbsLocationPopup(double x, double y, Widget child, boolean autoclose) { super(new ResourceLocation("dungeonsguide:gui/elements/locationedPopup.gui")); - this.x.setValue(x); - this.y.setValue(y); + absX.setValue(x); + absY.setValue(y); + absX.addOnUpdate(this::updatePos); + absY.addOnUpdate(this::updatePos); this.child.setValue(child); + this.autoclose = autoclose; + } + public AbsLocationPopup(BindableAttribute<Double> x, BindableAttribute<Double> y, Widget child, boolean autoclose) { + super(new ResourceLocation("dungeonsguide:gui/elements/locationedPopup.gui")); + x.exportTo(this.absX); + y.exportTo(this.absY); + absX.addOnUpdate(this::updatePos); + absY.addOnUpdate(this::updatePos); + this.child.setValue(child); + this.autoclose = autoclose; + } + + @Override + public void onMount() { + updatePos(0,0); + } + + public void updatePos(double old, double neu) { + PopupMgr popupMgr = PopupMgr.getPopupMgr(getDomElement()); + Rect rect = popupMgr.getDomElement().getAbsBounds(); + Rect rel = popupMgr.getDomElement().getRelativeBound(); + this.x.setValue( + (absX.getValue() - rect.getX()) * rel.getWidth() / rect.getWidth() + ); + this.y.setValue( + (absY.getValue() - rect.getY()) * rel.getHeight() / rect.getHeight() + ); } @Override public boolean mouseClicked(int absMouseX, int absMouseY, double relMouseX, double relMouseY, int mouseButton) { - if (!ref.getValue().getAbsBounds().contains(absMouseX, absMouseY)) { + if (!ref.getValue().getAbsBounds().contains(absMouseX, absMouseY) && autoclose) { PopupMgr.getPopupMgr(getDomElement()).closePopup(this,null); } return false; diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/MinecraftTooltip.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/popups/MinecraftTooltip.java index f445c52f..3206478a 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/MinecraftTooltip.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/popups/MinecraftTooltip.java @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. * |
