Skip to content

Commit 5f986f6

Browse files
committed
fix scaling and distance calculations
1 parent 3b16659 commit 5f986f6

4 files changed

Lines changed: 41 additions & 18 deletions

File tree

src/main/java/com/sorkopiko/teammatestracker/config/ModMenuIntegration.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import dev.isxander.yacl3.api.*;
66
import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder;
77
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder;
8-
import dev.isxander.yacl3.gui.controllers.slider.FloatSliderController;
98
import dev.kikugie.fletching_table.annotation.fabric.Entrypoint;
109
import net.minecraft.text.Text;
1110

@@ -16,11 +15,11 @@ public ConfigScreenFactory<?> getModConfigScreenFactory() {
1615
return parentScreen -> YetAnotherConfigLib.createBuilder()
1716
.title(Text.literal("Teammates Tracker Configuration"))
1817
.category(ConfigCategory.createBuilder()
19-
.name(Text.literal("General"))
20-
.tooltip(Text.literal("General settings for the mod"))
18+
.name(Text.literal("Display"))
19+
.tooltip(Text.literal("Configure how the mod displays information"))
2120
.group(OptionGroup.createBuilder()
22-
.name(Text.literal("Display Settings"))
23-
.description(OptionDescription.of(Text.literal("Configure how the mod displays information")))
21+
.name(Text.literal("General"))
22+
.description(OptionDescription.of(Text.literal("General settings for the mod")))
2423
.option(Option.<Boolean>createBuilder()
2524
.name(Text.literal("Enabled"))
2625
.description(OptionDescription.of(Text.literal("Enable or disable rendering")))
@@ -30,17 +29,33 @@ public ConfigScreenFactory<?> getModConfigScreenFactory() {
3029
enabled -> TeammatesConfig.HANDLER.instance().enabled = enabled)
3130
.controller(TickBoxControllerBuilder::create)
3231
.build())
32+
.build())
33+
.group(OptionGroup.createBuilder()
34+
.name(Text.literal("Markers"))
35+
.description(OptionDescription.of(Text.literal("Control how teammate markers are rendered")))
3336
.option(Option.<Float>createBuilder()
34-
.name(Text.literal("Marker Scale"))
35-
.description(OptionDescription.of(Text.literal("Scale of the teammate markers")))
37+
.name(Text.literal("Scale"))
38+
.description(OptionDescription.of(Text.literal("Scale of the markers")))
3639
.binding(
3740
1.0f,
3841
() -> TeammatesConfig.HANDLER.instance().markerScale,
3942
scale -> TeammatesConfig.HANDLER.instance().markerScale = scale)
4043
.controller(opt -> FloatSliderControllerBuilder.create(opt)
4144
.range(0.25f, 4.0f)
4245
.step(0.05f)
43-
.formatValue(val -> Text.literal(String.format("%.1f", val))))
46+
.formatValue(val -> Text.literal(String.format("%.2f", val))))
47+
.build())
48+
.option(Option.<Float>createBuilder()
49+
.name(Text.literal("Y Offset"))
50+
.description(OptionDescription.of(Text.literal("Vertical offset for the markers")))
51+
.binding(
52+
0.5f,
53+
() -> TeammatesConfig.HANDLER.instance().yOffset,
54+
offset -> TeammatesConfig.HANDLER.instance().yOffset = offset)
55+
.controller(opt -> FloatSliderControllerBuilder.create(opt)
56+
.range(0.0f, 2.0f)
57+
.step(0.01f)
58+
.formatValue(val -> Text.literal(String.format("%.2f", val))))
4459
.build())
4560
.build())
4661
.build())

src/main/java/com/sorkopiko/teammatestracker/config/TeammatesConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,7 @@ public class TeammatesConfig {
2020

2121
@SerialEntry
2222
public float markerScale = 1.f;
23+
24+
@SerialEntry
25+
public float yOffset = 0.5f;
2326
}

src/main/java/com/sorkopiko/teammatestracker/model/InterpolatedLocation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.minecraft.client.render.Camera;
44
import net.minecraft.entity.player.PlayerEntity;
55
import net.minecraft.util.math.MathHelper;
6+
import net.minecraft.util.math.Vec3d;
67

78
public record InterpolatedLocation(double x, double y, double z) {
89
public static InterpolatedLocation fromTeammate(Teammate teammate, long currentTime) {
@@ -25,7 +26,7 @@ public InterpolatedLocation withOffset(double xOffset, double yOffset, double zO
2526
return new InterpolatedLocation(x() + xOffset, y() + yOffset, z() + zOffset);
2627
}
2728

28-
public InterpolatedLocation relativeToCamera(Camera camera) {
29-
return this.withOffset(-camera.getPos().x, -camera.getPos().y, -camera.getPos().z);
29+
public InterpolatedLocation relativeToCamera(Vec3d camera) {
30+
return this.withOffset(-camera.x, -camera.y, -camera.z);
3031
}
3132
}

src/main/java/com/sorkopiko/teammatestracker/render/TeammateRenderer.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class TeammateRenderer {
2626
private static final MinecraftClient client = MinecraftClient.getInstance();
2727
private static final float ARROW_SIZE = 0.3f;
2828
private static final int TEXT_OFFSET = 20;
29-
private static final float ARROW_OFFSET_Y = 2.15f;
29+
private static final float ARROW_OFFSET_Y = 2.f;
3030

3131
public static void render(MatrixStack matrices, Camera camera, Map<UUID, Teammate> teammates, double tickDelta) {
3232
if (client.player == null || client.world == null || !TeammatesConfig.HANDLER.instance().enabled) return;
@@ -68,12 +68,16 @@ public static void render(MatrixStack matrices, Camera camera, Map<UUID, Teammat
6868
return Double.compare(distanceB, distanceA);
6969
})
7070
.forEach(teammate -> {
71-
InterpolatedLocation location = getLocation(teammate, currentTime, tickDelta)
72-
.withOffset(0, ARROW_OFFSET_Y, 0)
73-
.relativeToCamera(camera);
71+
InterpolatedLocation location = getLocation(teammate, currentTime, tickDelta);
7472

7573
double distance = calculateDistance(location, cameraPos);
76-
renderTeammateMarker(matrices, location, teammate, distance);
74+
renderTeammateMarker(
75+
matrices,
76+
location.withOffset(0, ARROW_OFFSET_Y + TeammatesConfig.HANDLER.instance().yOffset, 0)
77+
.relativeToCamera(cameraPos),
78+
teammate,
79+
distance
80+
);
7781
});
7882

7983
matrices.pop();
@@ -97,7 +101,7 @@ private static void renderTeammateMarker(MatrixStack matrices, InterpolatedLocat
97101

98102
EntityRenderDispatcher dispatcher = client.getEntityRenderDispatcher();
99103
matrices.multiply(dispatcher.getRotation());
100-
float scale = (float) getScale(distance, TeammatesConfig.HANDLER.instance().markerScale * 0.25f);
104+
float scale = (float) getScale(distance, TeammatesConfig.HANDLER.instance().markerScale);
101105
matrices.scale(scale, scale, scale);
102106
int backgroundColor = (int)(MinecraftClient.getInstance().options.getTextBackgroundOpacity(0.25F) * 255.0F) << 24 | 0x666666;
103107

@@ -158,8 +162,8 @@ private static void renderText(MatrixStack matrices, Text text, float x, float y
158162

159163
private static double getScale(double distance, float scaleFactor) {
160164
if (distance < 10.f) return scaleFactor;
161-
// return scaleFactor * (distance / 10.f);
162-
return scaleFactor * (distance - 9.f);
165+
return scaleFactor * (distance / 10.f);
166+
// return scaleFactor * (distance - 9.f);
163167
}
164168

165169
private static double calculateDistance(InterpolatedLocation location, Vec3d cameraPos) {

0 commit comments

Comments
 (0)