feat: prefix correctly depending on anchoring
This commit is contained in:
parent
ccb2f2eae8
commit
53e24b2e08
5 changed files with 106 additions and 16 deletions
|
@ -17,6 +17,8 @@ public abstract class HudModule extends AbstractModule {
|
||||||
return "HUD";
|
return "HUD";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO there should be a way for HUD mods to specify their defaults for x/y and anchor settings
|
||||||
|
|
||||||
protected HudModule() {
|
protected HudModule() {
|
||||||
super();
|
super();
|
||||||
this.x = Setting.Number.builder()
|
this.x = Setting.Number.builder()
|
||||||
|
@ -44,6 +46,13 @@ public abstract class HudModule extends AbstractModule {
|
||||||
.build(this);
|
.build(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String affixed(String in, Object... args) {
|
||||||
|
Anchor anchor = this.anchor.get();
|
||||||
|
String prefix = anchor.isLeft() ? "> " : "";
|
||||||
|
String postfix = anchor.isRight() ? " <" : "";
|
||||||
|
return String.format(prefix + in + postfix, args);
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean shouldHide() {
|
protected boolean shouldHide() {
|
||||||
return ICommons.MC.options.renderDebug;
|
return ICommons.MC.options.renderDebug;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package ftbsc.bscv.modules.hud;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import ftbsc.bscv.Boscovicino;
|
import ftbsc.bscv.Boscovicino;
|
||||||
import ftbsc.bscv.ICommons;
|
|
||||||
import ftbsc.bscv.api.ILoadable;
|
import ftbsc.bscv.api.ILoadable;
|
||||||
import ftbsc.bscv.api.IModule;
|
import ftbsc.bscv.api.IModule;
|
||||||
import ftbsc.bscv.modules.HudModule;
|
import ftbsc.bscv.modules.HudModule;
|
||||||
|
@ -13,7 +12,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import static ftbsc.bscv.tools.Text.TextBuilder;
|
import static ftbsc.bscv.tools.Text.TextBuilder;
|
||||||
|
|
||||||
@AutoService(ILoadable.class)
|
@AutoService(ILoadable.class)
|
||||||
public class ActiveModules extends HudModule implements ICommons {
|
public class ActiveModules extends HudModule {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onRenderOverlay(RenderGameOverlayEvent event) {
|
public void onRenderOverlay(RenderGameOverlayEvent event) {
|
||||||
if (event.getType() != ElementType.TEXT) return;
|
if (event.getType() != ElementType.TEXT) return;
|
||||||
|
@ -22,7 +21,7 @@ public class ActiveModules extends HudModule implements ICommons {
|
||||||
for (IModule m : Boscovicino.modManager.mods) {
|
for (IModule m : Boscovicino.modManager.mods) {
|
||||||
if (m.isEnabled() && !m.getGroup().equalsIgnoreCase("HUD")) {
|
if (m.isEnabled() && !m.getGroup().equalsIgnoreCase("HUD")) {
|
||||||
TextBuilder()
|
TextBuilder()
|
||||||
.txt(String.format("%s <", m.getName()))
|
.txt(this.affixed(m.getName()))
|
||||||
.anchor(this.anchor.get())
|
.anchor(this.anchor.get())
|
||||||
.x(this.x.get())
|
.x(this.x.get())
|
||||||
.y(this.y.get() + offset)
|
.y(this.y.get() + offset)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package ftbsc.bscv.modules.hud;
|
package ftbsc.bscv.modules.hud;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import ftbsc.bscv.ICommons;
|
|
||||||
import ftbsc.bscv.api.ILoadable;
|
import ftbsc.bscv.api.ILoadable;
|
||||||
import ftbsc.bscv.modules.HudModule;
|
import ftbsc.bscv.modules.HudModule;
|
||||||
import ftbsc.bscv.tools.Setting;
|
import ftbsc.bscv.tools.Setting;
|
||||||
|
@ -22,7 +21,7 @@ import java.util.stream.Collectors;
|
||||||
import static ftbsc.bscv.tools.Text.TextBuilder;
|
import static ftbsc.bscv.tools.Text.TextBuilder;
|
||||||
|
|
||||||
@AutoService(ILoadable.class)
|
@AutoService(ILoadable.class)
|
||||||
public class EntityList extends HudModule implements ICommons {
|
public class EntityList extends HudModule {
|
||||||
|
|
||||||
public final ForgeConfigSpec.ConfigValue<String> search;
|
public final ForgeConfigSpec.ConfigValue<String> search;
|
||||||
|
|
||||||
|
@ -60,7 +59,7 @@ public class EntityList extends HudModule implements ICommons {
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
for (String u : uniques) {
|
for (String u : uniques) {
|
||||||
TextBuilder()
|
TextBuilder()
|
||||||
.txt(String.format("%s", u))
|
.txt(this.affixed(u))
|
||||||
.anchor(this.anchor.get())
|
.anchor(this.anchor.get())
|
||||||
.x(this.x.get())
|
.x(this.x.get())
|
||||||
.y(this.y.get() + offset)
|
.y(this.y.get() + offset)
|
||||||
|
|
|
@ -15,7 +15,6 @@ import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.TickEvent.Phase;
|
import net.minecraftforge.event.TickEvent.Phase;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
|
||||||
import java.util.ArrayDeque;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
|
||||||
|
@ -31,6 +30,7 @@ public class InfoDisplay extends HudModule implements ICommons {
|
||||||
|
|
||||||
public final ForgeConfigSpec.ConfigValue<Boolean> logo;
|
public final ForgeConfigSpec.ConfigValue<Boolean> logo;
|
||||||
public final ForgeConfigSpec.ConfigValue<Boolean> speed;
|
public final ForgeConfigSpec.ConfigValue<Boolean> speed;
|
||||||
|
public final ForgeConfigSpec.ConfigValue<Boolean> age;
|
||||||
public final ForgeConfigSpec.ConfigValue<Boolean> time;
|
public final ForgeConfigSpec.ConfigValue<Boolean> time;
|
||||||
public final ForgeConfigSpec.ConfigValue<Boolean> fps;
|
public final ForgeConfigSpec.ConfigValue<Boolean> fps;
|
||||||
// public final ForgeConfigSpec.ConfigValue<Boolean> biome;
|
// public final ForgeConfigSpec.ConfigValue<Boolean> biome;
|
||||||
|
@ -60,6 +60,12 @@ public class InfoDisplay extends HudModule implements ICommons {
|
||||||
.fallback(true)
|
.fallback(true)
|
||||||
.build(this);
|
.build(this);
|
||||||
|
|
||||||
|
this.age = Setting.Bool.builder()
|
||||||
|
.name("age")
|
||||||
|
.comment("show age of the world")
|
||||||
|
.fallback(true)
|
||||||
|
.build(this);
|
||||||
|
|
||||||
this.time = Setting.Bool.builder()
|
this.time = Setting.Bool.builder()
|
||||||
.name("time")
|
.name("time")
|
||||||
.comment("show world time")
|
.comment("show world time")
|
||||||
|
@ -98,6 +104,11 @@ public class InfoDisplay extends HudModule implements ICommons {
|
||||||
double buf = 0.0;
|
double buf = 0.0;
|
||||||
for (double v : this.history_speed) { buf += v; }
|
for (double v : this.history_speed) { buf += v; }
|
||||||
this.average_speed = buf / this.history_speed.size();
|
this.average_speed = buf / this.history_speed.size();
|
||||||
|
|
||||||
|
if (this.last_fps_string != MC.fpsString) {
|
||||||
|
this.last_fps_string = MC.fpsString;
|
||||||
|
this.curr_fps = this.last_fps_string.split(" ")[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -125,13 +136,16 @@ public class InfoDisplay extends HudModule implements ICommons {
|
||||||
offset += MC.font.lineHeight * scale * 4.0;
|
offset += MC.font.lineHeight * scale * 4.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.time.get()) {
|
long day = 0;
|
||||||
long daytime = 0;
|
long time = 0;
|
||||||
if (MC.level != null) {
|
if (MC.level != null) {
|
||||||
daytime = MC.level.dayTime();
|
day = MC.level.dayTime() / 24000L;
|
||||||
}
|
time = MC.level.dayTime() % 24000L;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.fps.get()) {
|
||||||
TextBuilder()
|
TextBuilder()
|
||||||
.txt(String.format("> time: %d/1200 (%d day)", (daytime / 20) % 1200, daytime / (20 * 1200) ))
|
.txt(this.affixed("fps: %s", this.curr_fps))
|
||||||
.anchor(this.anchor.get())
|
.anchor(this.anchor.get())
|
||||||
.x(this.x.get())
|
.x(this.x.get())
|
||||||
.y(this.y.get() + offset)
|
.y(this.y.get() + offset)
|
||||||
|
@ -142,7 +156,7 @@ public class InfoDisplay extends HudModule implements ICommons {
|
||||||
|
|
||||||
if (this.speed.get()) {
|
if (this.speed.get()) {
|
||||||
TextBuilder()
|
TextBuilder()
|
||||||
.txt(String.format("> speed: %.1f [%.1f] m/s", this.instant_speed * 20.0, this.average_speed * 20.0))
|
.txt(this.affixed("speed: %.1f [%.1f] m/s", this.instant_speed * 20.0, this.average_speed * 20.0))
|
||||||
.anchor(this.anchor.get())
|
.anchor(this.anchor.get())
|
||||||
.x(this.x.get())
|
.x(this.x.get())
|
||||||
.y(this.y.get() + offset)
|
.y(this.y.get() + offset)
|
||||||
|
@ -151,9 +165,20 @@ public class InfoDisplay extends HudModule implements ICommons {
|
||||||
offset += MC.font.lineHeight * scale;
|
offset += MC.font.lineHeight * scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.fps.get()) {
|
if (this.age.get()) {
|
||||||
TextBuilder()
|
TextBuilder()
|
||||||
.txt("> " + MC.fpsString)
|
.txt(this.affixed("age: %d (~%d days)", day, day / (3 * 24) )) // 3 mc days last 1 hour
|
||||||
|
.anchor(this.anchor.get())
|
||||||
|
.x(this.x.get())
|
||||||
|
.y(this.y.get() + offset)
|
||||||
|
.scale(scale)
|
||||||
|
.render(event.getMatrixStack(), event.getWindow());
|
||||||
|
offset += MC.font.lineHeight * scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.time.get()) {
|
||||||
|
TextBuilder()
|
||||||
|
.txt(this.affixed("time: %d/%d (%s)", (time / TPS), this.getNextStep(time) / TPS, this.getTimePhase(time) ))
|
||||||
.anchor(this.anchor.get())
|
.anchor(this.anchor.get())
|
||||||
.x(this.x.get())
|
.x(this.x.get())
|
||||||
.y(this.y.get() + offset)
|
.y(this.y.get() + offset)
|
||||||
|
@ -162,4 +187,28 @@ public class InfoDisplay extends HudModule implements ICommons {
|
||||||
offset += MC.font.lineHeight * scale;
|
offset += MC.font.lineHeight * scale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String last_fps_string;
|
||||||
|
private String curr_fps = "0";
|
||||||
|
|
||||||
|
// Time utils
|
||||||
|
private String getTimePhase(long time) {
|
||||||
|
if (time > 23000) return "Dawn";
|
||||||
|
if (time > 18500) return "Night";
|
||||||
|
if (time > 17500) return "Midnight";
|
||||||
|
if (time > 13000) return "Evening";
|
||||||
|
if (time > 12000) return "Dusk";
|
||||||
|
if (time > 6500) return "Afternoon";
|
||||||
|
if (time > 5500) return "Noon";
|
||||||
|
return "Morning";
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getNextStep(long time) {
|
||||||
|
if (time > 23000) return 24000;
|
||||||
|
if (time > 13000) return 23000;
|
||||||
|
if (time > 12000) return 13000;
|
||||||
|
return 12000;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final int TPS = 20;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,40 @@ public enum Anchor implements ICommons {
|
||||||
|
|
||||||
private Anchor(String in) { }
|
private Anchor(String in) { }
|
||||||
|
|
||||||
|
public boolean isLeft() {
|
||||||
|
switch (this) {
|
||||||
|
case BOTTOMLEFT:
|
||||||
|
case MIDDLELEFT:
|
||||||
|
case TOPLEFT:
|
||||||
|
return true;
|
||||||
|
case BOTTOMRIGHT:
|
||||||
|
case MIDDLERIGHT:
|
||||||
|
case TOPRIGHT:
|
||||||
|
case BOTTOMCENTER:
|
||||||
|
case MIDDLECENTER:
|
||||||
|
case TOPCENTER:
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRight() {
|
||||||
|
switch (this) {
|
||||||
|
case BOTTOMRIGHT:
|
||||||
|
case MIDDLERIGHT:
|
||||||
|
case TOPRIGHT:
|
||||||
|
return true;
|
||||||
|
case BOTTOMLEFT:
|
||||||
|
case MIDDLELEFT:
|
||||||
|
case TOPLEFT:
|
||||||
|
case BOTTOMCENTER:
|
||||||
|
case MIDDLECENTER:
|
||||||
|
case TOPCENTER:
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Vector2f translate(Vector2f in, int textWidth, int lineHeight, float scale, MainWindow window) {
|
public Vector2f translate(Vector2f in, int textWidth, int lineHeight, float scale, MainWindow window) {
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
switch (this) {
|
switch (this) {
|
||||||
|
|
Loading…
Reference in a new issue