aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java
diff options
context:
space:
mode:
authorBuildTools <james.jenour@protonmail.com>2021-02-05 03:52:39 +0800
committerBuildTools <james.jenour@protonmail.com>2021-02-05 03:52:39 +0800
commitc40f8e737c62c8dadef294f8621716529d354796 (patch)
tree3f0fb8be376d09e4fa1a7d95da0624359d8f67b1 /src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java
parent5ea3130efceca3148334a613471cec7f22acdf8c (diff)
downloadnotenoughupdates-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.java113
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;
}