diff options
| author | BuildTools <james.jenour@protonmail.com> | 2021-02-05 03:52:39 +0800 |
|---|---|---|
| committer | BuildTools <james.jenour@protonmail.com> | 2021-02-05 03:52:39 +0800 |
| commit | c40f8e737c62c8dadef294f8621716529d354796 (patch) | |
| tree | 3f0fb8be376d09e4fa1a7d95da0624359d8f67b1 /src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java | |
| parent | 5ea3130efceca3148334a613471cec7f22acdf8c (diff) | |
| download | notenoughupdates-c40f8e737c62c8dadef294f8621716529d354796.tar.gz notenoughupdates-c40f8e737c62c8dadef294f8621716529d354796.tar.bz2 notenoughupdates-c40f8e737c62c8dadef294f8621716529d354796.zip | |
PRE15
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java')
| -rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java | 113 |
1 files changed, 72 insertions, 41 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java index c73c3b8d..30f2a9fb 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java @@ -8,8 +8,10 @@ import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL14; +import org.lwjgl.util.vector.Vector2f; import java.awt.*; +import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; @@ -20,81 +22,110 @@ public abstract class TextOverlay { public int overlayWidth = -1; public int overlayHeight = -1; public List<String> overlayStrings = null; + private Supplier<List<String>> dummyStrings; + + public boolean shouldUpdateFrequent = false; private static final int PADDING_X = 5; private static final int PADDING_Y = 5; - public TextOverlay(Position position, Supplier<TextOverlayStyle> styleSupplier) { + public TextOverlay(Position position, Supplier<List<String>> dummyStrings, Supplier<TextOverlayStyle> styleSupplier) { this.position = position; this.styleSupplier = styleSupplier; + if(dummyStrings == null) { + this.dummyStrings = () -> null; + } else { + this.dummyStrings = dummyStrings; + } } - public void tick() { - update(); + public Vector2f getDummySize() { + List<String> dummyStrings = this.dummyStrings.get(); - if(overlayStrings != null) { - overlayHeight = 0; - overlayWidth = 0; - for(String s : overlayStrings) { + if(dummyStrings != null) { + int overlayHeight = 0; + int overlayWidth = 0; + for(String s : dummyStrings) { if(s == null) { overlayHeight += 3; continue; } - int sWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(s); - if(sWidth > overlayWidth) { - overlayWidth = sWidth; + for(String s2 : s.split("\n")) { + int sWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(s2); + if(sWidth > overlayWidth) { + overlayWidth = sWidth; + } + overlayHeight += 10; } - overlayHeight += 10; } overlayHeight -= 2; + + return new Vector2f(overlayWidth+PADDING_X*2, overlayHeight+PADDING_Y*2); } + return new Vector2f(100, 50); + } + + public void tick() { + update(); } - public void updateFrequent() {}; + public void updateFrequent() {} public abstract void update(); + public void renderDummy() { + List<String> dummyStrings = this.dummyStrings.get(); + render(dummyStrings); + } + public void render() { - if(overlayStrings == null) return; + if(shouldUpdateFrequent) { + updateFrequent(); + shouldUpdateFrequent = false; + } + render(overlayStrings); + } - updateFrequent(); + private void render(List<String> strings) { + if(strings == null) return; - if(overlayStrings != null) { - overlayHeight = 0; - overlayWidth = 0; - for(String s : overlayStrings) { - if(s == null) { - overlayHeight += 3; - continue; - } - int sWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(s); + overlayHeight = 0; + overlayWidth = 0; + for(String s : strings) { + if(s == null) { + overlayHeight += 3; + continue; + } + for(String s2 : s.split("\n")) { + int sWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(s2); if(sWidth > overlayWidth) { overlayWidth = sWidth; } overlayHeight += 10; } - overlayHeight -= 2; - - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + } + overlayHeight -= 2; - int x = position.getAbsX(scaledResolution); - int y = position.getAbsY(scaledResolution); + ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - TextOverlayStyle style = styleSupplier.get(); + int x = position.getAbsX(scaledResolution, overlayWidth+PADDING_X*2); + int y = position.getAbsY(scaledResolution, overlayHeight+PADDING_Y*2); - if(style == TextOverlayStyle.BACKGROUND) Gui.drawRect(x, y, x+overlayWidth+PADDING_X*2, y+overlayHeight+PADDING_Y*2, 0x80000000); + TextOverlayStyle style = styleSupplier.get(); - int yOff = 0; - for(String s : overlayStrings) { - if(s == null) { - yOff += 3; - } else { + if(style == TextOverlayStyle.BACKGROUND) Gui.drawRect(x, y, x+overlayWidth+PADDING_X*2, y+overlayHeight+PADDING_Y*2, 0x80000000); - 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); + 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); + int yOff = 0; + for(String s : strings) { + if(s == null) { + yOff += 3; + } else { + for(String s2 : s.split("\n")) { if(style == TextOverlayStyle.FULL_SHADOW) { - String clean = Utils.cleanColourNotModifiers(s); + String clean = Utils.cleanColourNotModifiers(s2); for(int xO=-2; xO<=2; xO++) { for(int yO=-2; yO<=2; yO++) { if(Math.abs(xO) != Math.abs(yO)) { @@ -105,8 +136,8 @@ public abstract class TextOverlay { } } } - Minecraft.getMinecraft().fontRendererObj.drawString(s, - x+PADDING_X, y+PADDING_Y+yOff, 0xffffff, style == TextOverlayStyle.MC_SHADOW); + Minecraft.getMinecraft().fontRendererObj.drawString(s2, + x+PADDING_X, y+PADDING_Y+yOff, 0xffffff, style == TextOverlayStyle.MC_SHADOW); yOff += 10; } |
