From 8ab66b8da6087899921e635b4d798696095f80cc Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 1 Jun 2022 03:52:16 +0200 Subject: [PATCH] Marking Beziers - Adjusted station icon positioning on turns --- .../edgePoint/TrackTargetingBehaviour.java | 20 ++++++++++++++++++- .../edgePoint/station/StationMarker.java | 11 +++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/TrackTargetingBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/TrackTargetingBehaviour.java index fe237c7ca..f4e09b955 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/TrackTargetingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/TrackTargetingBehaviour.java @@ -9,6 +9,7 @@ import com.jozufozu.flywheel.core.PartialModel; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform; +import com.simibubi.create.content.logistics.trains.BezierConnection; import com.simibubi.create.content.logistics.trains.DimensionPalette; import com.simibubi.create.content.logistics.trains.GraphLocation; import com.simibubi.create.content.logistics.trains.ITrackBlock; @@ -19,6 +20,7 @@ import com.simibubi.create.content.logistics.trains.TrackNode; import com.simibubi.create.content.logistics.trains.management.edgePoint.signal.SingleTileEdgePoint; import com.simibubi.create.content.logistics.trains.management.edgePoint.signal.TrackEdgePoint; import com.simibubi.create.content.logistics.trains.track.BezierTrackPointLocation; +import com.simibubi.create.content.logistics.trains.track.TrackTileEntity; import com.simibubi.create.content.schematics.SchematicWorld; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; @@ -36,6 +38,7 @@ import net.minecraft.core.Direction.AxisDirection; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; +import net.minecraft.util.Mth; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; @@ -75,7 +78,7 @@ public class TrackTargetingBehaviour extends TileEntit public boolean isSafeNBT() { return true; } - + @Override public void write(CompoundTag nbt, boolean clientPacket) { nbt.putUUID("Id", id); @@ -265,6 +268,21 @@ public class TrackTargetingBehaviour extends TileEntit return targetTrack.offset(tileEntity.getBlockPos()); } + public BlockPos getPositionForMapMarker() { + BlockPos target = targetTrack.offset(tileEntity.getBlockPos()); + if (targetBezier != null && getWorld().getBlockEntity(target) instanceof TrackTileEntity tte) { + BezierConnection bc = tte.getConnections() + .get(targetBezier.curveTarget()); + if (bc == null) + return target; + double length = Mth.floor(bc.getLength() * 2); + int seg = targetBezier.segment() + 1; + double t = seg / length; + return new BlockPos(bc.getPosition(t)); + } + return target; + } + public AxisDirection getTargetDirection() { return targetDirection; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/station/StationMarker.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/station/StationMarker.java index fb50df799..42da0c200 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/station/StationMarker.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/station/StationMarker.java @@ -20,7 +20,6 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; -import net.minecraft.util.Mth; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; @@ -52,8 +51,10 @@ public class StationMarker { if (stationOption.isEmpty() || stationOption.get().getStation() == null) return null; - String name = stationOption.get().getStation().name; - return new StationMarker(pos, TileEntityBehaviour.get(stationOption.get(), TrackTargetingBehaviour.TYPE).getGlobalPosition(), new TextComponent(name)); + String name = stationOption.get() + .getStation().name; + return new StationMarker(pos, TileEntityBehaviour.get(stationOption.get(), TrackTargetingBehaviour.TYPE) + .getPositionForMapMarker(), new TextComponent(name)); } public CompoundTag save() { @@ -144,13 +145,13 @@ public class StationMarker { Font font = Minecraft.getInstance().font; Component component = getName(); float f6 = (float)font.width(component); - float f7 = Mth.clamp(25.0F / f6, 0.0F, 6.0F / 9.0F); +// float f7 = Mth.clamp(25.0F / f6, 0.0F, 6.0F / 9.0F); ms.pushPose(); //ms.translate((double)(0.0F + (float)getX() / 2.0F + 64.0F / 2.0F), (double)(0.0F + (float)getY() / 2.0F + 64.0F + 4.0F), (double)-0.025F); ms.translate(0, 6.0D, -0.005F); ms.scale(0.8f, 0.8f, 1.0F); - ms.translate(-f6 / 2f, 0, 0); + ms.translate(-f6 / 2f + .5f, 0, 0); //ms.scale(f7, f7, 1.0F); font.drawInBatch(component, 0.0F, 0.0F, -1, false, ms.last().pose(), bufferSource, false, Integer.MIN_VALUE, 15728880); ms.popPose();