Skip to content

Commit

Permalink
add DirectionRenderer
Browse files Browse the repository at this point in the history
  • Loading branch information
Boxadactle committed Feb 20, 2024
1 parent 52bcdfc commit f54257f
Show file tree
Hide file tree
Showing 9 changed files with 208 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class CoordinatesDisplay {

public static final String MOD_ID = "coordinatesdisplay";

public static final String VERSION = "6.0.0";
public static final String VERSION = "9.0.0";

public static final String VERSION_STRING = MOD_NAME + " v" + VERSION;

Expand Down Expand Up @@ -63,6 +63,7 @@ public static void init() {
CoordinatesHuds.register(NetherOverworldRenderer.class);
CoordinatesHuds.register(HotbarRenderer.class);
CoordinatesHuds.register(SpawnpointRenderer.class);
CoordinatesHuds.register(DirectionRenderer.class);

LOGGER.info("Initializing hud");
HUD = new Hud();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public class ModConfig implements BConfig {
public boolean showDeathPosInChat = true;

public int padding = 5;
public int textPadding = 10;
public int textPadding = 5;

public String posChatMessage = "{x} {y} {z}";
public String copyPosMessage = "{x}, {y}, {z}";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
package dev.boxadactle.coordinatesdisplay.hud.renderer;

import dev.boxadactle.boxlib.layouts.component.LayoutContainerComponent;
import dev.boxadactle.boxlib.layouts.component.ParagraphComponent;
import dev.boxadactle.boxlib.layouts.layout.ColumnLayout;
import dev.boxadactle.boxlib.layouts.layout.PaddingLayout;
import dev.boxadactle.boxlib.layouts.layout.RowLayout;
import dev.boxadactle.boxlib.math.geometry.Rect;
import dev.boxadactle.boxlib.math.geometry.Vec3;
import dev.boxadactle.boxlib.math.mathutils.NumberFormatter;
import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay;
import dev.boxadactle.coordinatesdisplay.ModUtil;
import dev.boxadactle.coordinatesdisplay.hud.DisplayMode;
import dev.boxadactle.coordinatesdisplay.hud.HudRenderer;
import dev.boxadactle.coordinatesdisplay.position.Position;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import oshi.util.tuples.Triplet;

@DisplayMode(
value = "direction",
hasChunkData = false,
hasBiome = false,
hasMCVersion = false,
hasDimension = false
)
public class DirectionRenderer implements HudRenderer {

private enum Direction {
POSITIVE_Z(Component.translatable("hud.coordinatesdisplay.direction.positive", "Z")), // south
NEGATIVE_X(Component.translatable("hud.coordinatesdisplay.direction.negative", "X")), // east
NEGATIVE_Z(Component.translatable("hud.coordinatesdisplay.direction.negative", "Z")), // north
POSITIVE_X(Component.translatable("hud.coordinatesdisplay.direction.positive", "X")), // west

POSITIVE_Y(Component.translatable("hud.coordinatesdisplay.direction.positive", "Y")), // up
NEGATIVE_Y(Component.translatable("hud.coordinatesdisplay.direction.negative", "Y")); // down

public final Component component;

Direction(Component component) {
this.component = component;
}

public static Direction fromYaw(double yaw) {
return Direction.values()[(int) Math.round(yaw / 90.0F) & 3];
}

public static Direction fromPitch(double pitch) {
return pitch > 0 ? POSITIVE_Y : NEGATIVE_Y;
}
}

// reused from MinRenderer
private String[] createYawComponents(double yaw) {
// compiled using the debug screen
String[][] directions = {
// X Z
{ "_", "+" },
{ "-", "+" },
{ "-", "_" },
{ "-", "-" },
{ "_", "-" },
{ "+", "-" },
{ "+", "_" },
{ "+", "+" }
};

return directions[(int) Math.round(yaw / 45.0F) & 7];
}

@Override
public Rect<Integer> renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) {
NumberFormatter<Double> formatter = genFormatter();
Triplet<String, String, String> player = this.roundPosition(pos.position.getPlayerPos(), pos.position.getBlockPos(), CoordinatesDisplay.getConfig().decimalPlaces);

ColumnLayout hud = new ColumnLayout(0, 0, config().textPadding);
RowLayout row = new RowLayout(0, 0, config().textPadding * 2);

if (config().renderXYZ) {
Component xtext = definition("x", value(player.getA()));
Component ytext = definition("y", value(player.getB()));
Component ztext = definition("z", value(player.getC()));

row.addComponent(new ParagraphComponent(
0,
xtext,
ytext,
ztext
));
}

// we just reuse the compass renderer from the spawnpoint renderer
SpawnpointRenderer.CompassRenderer compassRenderer = new SpawnpointRenderer.CompassRenderer(pos, new BlockPos(0, 0, 0));
compassRenderer.size = 28;

RowLayout r = new RowLayout(0, 0, 0);
r.addComponent(compassRenderer);
row.addComponent(new LayoutContainerComponent(new PaddingLayout(0, 0, 4, r)));

hud.addComponent(new LayoutContainerComponent(row));

// direction
ParagraphComponent direction = new ParagraphComponent(0);

double yaw = pos.headRot.wrapYaw();

if (config().renderDirection) {
String[] components = createYawComponents(yaw);
Component intText = definition(
Component.literal(
components[0] + " (" +
formatter.formatDecimal(compassRenderer.calculateRelativeDirection(pos.position.getBlockPos(), new Vec3<>(0, 0, 0), yaw)) + "°) " +
components[1]
)
);

String dir = ModUtil.getDirectionFromYaw(yaw);

Component directionText = definition(
"direction",
value(resolveDirection(dir)),
value(resolveDirection(dir, true))
);

direction.add(intText);
direction.add(directionText);
}

if (config().renderDirectionInt) {
Direction directionFromYaw = Direction.fromYaw(yaw);
Component yawText = definition(
"yaw",
value(formatter.formatDecimal(yaw)),
value(directionFromYaw.component)
);

Direction pitchFromYaw = Direction.fromPitch(pos.headRot.wrapPitch());
Component pitchText = definition(
"pitch",
value(formatter.formatDecimal(pos.headRot.wrapPitch())),
value(pitchFromYaw.component)
);

direction.add(yawText);
direction.add(pitchText);
}

hud.addComponent(direction);

return renderHud(guiGraphics, new PaddingLayout(x, y, config().padding, hud));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ public Rect<Integer> renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi
public static class CompassRenderer extends LayoutComponent<Position> {
BlockPos spawnpoint;

int size = 32;
public int size = 32;

public CompassRenderer(Position component, BlockPos spawnpoint) {
super(component);
Expand All @@ -189,7 +189,7 @@ public int getHeight() {
return size;
}

private double calculateRelativeDirection(Vec3<Integer> pos1, Vec3<Integer> pos2, double yaw) {
public double calculateRelativeDirection(Vec3<Integer> pos1, Vec3<Integer> pos2, double yaw) {
int x = pos2.getX() - pos1.getX();
int z = pos2.getZ() - pos1.getZ();

Expand Down Expand Up @@ -232,7 +232,6 @@ private ResourceLocation resolveCompassTexture(double d) {
public void render(GuiGraphics graphics, int x, int y) {
double degrees = calculateRelativeDirection(component.position.getBlockPos(), new Vec3<>(spawnpoint.getX(), spawnpoint.getY(), spawnpoint.getZ()), component.headRot.wrapYaw());
ResourceLocation compassTexture = resolveCompassTexture(degrees);
int size = 32;
graphics.blit(
compassTexture,
x, y,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@
"hud.coordinatesdisplay.spawnpoint.y": "Y: %s",
"hud.coordinatesdisplay.spawnpoint.z": "Z: %s",

"hud.coordinatesdisplay.direction": "Direction",
"hud.coordinatesdisplay.direction.x": "X: %s",
"hud.coordinatesdisplay.direction.y": "Y: %s",
"hud.coordinatesdisplay.direction.z": "Z: %s",
"hud.coordinatesdisplay.direction.direction": "Facing %s (%s)",
"hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)",
"hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)",
"hud.coordinatesdisplay.direction.positive": "positive %s",
"hud.coordinatesdisplay.direction.negative": "negative %s",

"screen.coordinatesdisplay.config": "Config for %s",
"screen.coordinatesdisplay.confirmreset": "Confirm Reset to Default",
"screen.coordinatesdisplay.render": "Rendering Config for %s",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@
"hud.coordinatesdisplay.spawnpoint.y": "Y: %s",
"hud.coordinatesdisplay.spawnpoint.z": "Z: %s",

"hud.coordinatesdisplay.direction": "Dirección",
"hud.coordinatesdisplay.direction.x": "X: %s",
"hud.coordinatesdisplay.direction.y": "Y: %s",
"hud.coordinatesdisplay.direction.z": "Z: %s",
"hud.coordinatesdisplay.direction.direction": "Mirando al %s (%s)",
"hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)",
"hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)",
"hud.coordinatesdisplay.direction.positive": "%s positivo",
"hud.coordinatesdisplay.direction.negative": "%s negativo",

"screen.coordinatesdisplay.config": "Configuración de %s",
"screen.coordinatesdisplay.confirmreset": "Confirme que desea restaurar la configurción por defecto",
"screen.coordinatesdisplay.render": "Configuración de renderizado de %s",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@
"hud.coordinatesdisplay.spawnpoint.y": "Y: %s",
"hud.coordinatesdisplay.spawnpoint.z": "Z: %s",

"hud.coordinatesdisplay.direction": "Direction",
"hud.coordinatesdisplay.direction.x": "X: %s",
"hud.coordinatesdisplay.direction.y": "Y: %s",
"hud.coordinatesdisplay.direction.z": "Z: %s",
"hud.coordinatesdisplay.direction.direction": "Facing %s (%s)",
"hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)",
"hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)",
"hud.coordinatesdisplay.direction.positive": "positive %s",
"hud.coordinatesdisplay.direction.negative": "negative %s",

"screen.coordinatesdisplay.config": "%sの設定",
"screen.coordinatesdisplay.confirmreset": "デフォルトにリセットを確認",
"screen.coordinatesdisplay.render": "%sの描画設定",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@
"hud.coordinatesdisplay.spawnpoint.y": "Y: %s",
"hud.coordinatesdisplay.spawnpoint.z": "Z: %s",

"hud.coordinatesdisplay.direction": "Direction",
"hud.coordinatesdisplay.direction.x": "X: %s",
"hud.coordinatesdisplay.direction.y": "Y: %s",
"hud.coordinatesdisplay.direction.z": "Z: %s",
"hud.coordinatesdisplay.direction.direction": "Facing %s (%s)",
"hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)",
"hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)",
"hud.coordinatesdisplay.direction.positive": "positive %s",
"hud.coordinatesdisplay.direction.negative": "negative %s",

"screen.coordinatesdisplay.config": "%s 환경설정",
"screen.coordinatesdisplay.confirmreset": "기본값으로 초기화 확인",
"screen.coordinatesdisplay.render": "%s 의 렌더링 구성",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@
"hud.coordinatesdisplay.spawnpoint.y": "Y: %s",
"hud.coordinatesdisplay.spawnpoint.z": "Z: %s",

"hud.coordinatesdisplay.direction": "Direction",
"hud.coordinatesdisplay.direction.x": "X: %s",
"hud.coordinatesdisplay.direction.y": "Y: %s",
"hud.coordinatesdisplay.direction.z": "Z: %s",
"hud.coordinatesdisplay.direction.direction": "Facing %s (%s)",
"hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)",
"hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)",
"hud.coordinatesdisplay.direction.positive": "positive %s",
"hud.coordinatesdisplay.direction.negative": "negative %s",

"screen.coordinatesdisplay.config": "Конфигурация для %s",
"screen.coordinatesdisplay.confirmreset": "Подтвердить сброс настроек по умолчанию",
"screen.coordinatesdisplay.render": "Рендеринг конфигурации для %s",
Expand Down

0 comments on commit f54257f

Please sign in to comment.