diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/config/CUIConfiguration.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/config/CUIConfiguration.java index 37607366..9a76847b 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/config/CUIConfiguration.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/config/CUIConfiguration.java @@ -81,6 +81,7 @@ public void write( private boolean debugMode = false; private boolean promiscuous = false; private boolean clearAllOnKey = false; + private boolean hideObstructedLines = false; private Colour cuboidGridColor = ConfiguredColour.CUBOIDGRID.getDefault(); private Colour cuboidEdgeColor = ConfiguredColour.CUBOIDBOX.getDefault(); @@ -143,6 +144,10 @@ public void setClearAllOnKey(boolean clearAllOnKey) { this.clearAllOnKey = clearAllOnKey; } + public boolean isHideObstructedLines() { + return this.hideObstructedLines; + } + private static Path getConfigFile() { return FabricLoader.getInstance().getConfigDir().resolve(CUIConfiguration.CONFIG_FILE_NAME); } @@ -168,6 +173,7 @@ public static CUIConfiguration create() { configArray.put("debugMode", config.debugMode); configArray.put("promiscuous", config.promiscuous); configArray.put("clearAllOnKey", config.clearAllOnKey); + configArray.put("hideObstructedLines", config.hideObstructedLines); configArray.put("cuboidGridColor", config.cuboidGridColor); configArray.put("cuboidEdgeColor", config.cuboidEdgeColor); @@ -203,6 +209,7 @@ public void configChanged() { debugMode = (Boolean) configArray.get("debugMode"); promiscuous = (Boolean) configArray.get("promiscuous"); clearAllOnKey = (Boolean) configArray.get("clearAllOnKey"); + hideObstructedLines = (Boolean) configArray.get("hideObstructedLines"); cuboidGridColor = (Colour) configArray.get("cuboidGridColor"); cuboidEdgeColor = (Colour) configArray.get("cuboidEdgeColor"); @@ -223,7 +230,7 @@ public void configChanged() { public Object getDefaultValue(String text) { return switch (text) { - case "debugMode", "promiscuous", "clearAllOnKey" -> false; + case "debugMode", "promiscuous", "clearAllOnKey", "hideObstructedLines" -> false; case "cuboidGridColor" -> ConfiguredColour.CUBOIDGRID.getDefault(); case "cuboidEdgeColor" -> ConfiguredColour.CUBOIDBOX.getDefault(); case "cuboidFirstPointColor" -> ConfiguredColour.CUBOIDPOINT1.getDefault(); @@ -266,6 +273,7 @@ public Object getDefaultValue(String text) { case "debugMode" -> "worldeditcui.options.debugMode"; case "promiscuous" -> "worldeditcui.options.compat.spammy"; case "clearAllOnKey" -> "worldeditcui.options.extra.clearall"; + case "hideObstructedLines" -> "worldeditcui.options.extra.hideObstructedLines"; case "cuboidGridColor" -> "worldeditcui.color.cuboidgrid"; case "cuboidEdgeColor" -> "worldeditcui.color.cuboidedge"; case "cuboidFirstPointColor" -> "worldeditcui.color.cuboidpoint1"; diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIListenerWorldRender.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIListenerWorldRender.java index 282c2868..cf216ea9 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIListenerWorldRender.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIListenerWorldRender.java @@ -103,7 +103,12 @@ public void onRender(final float partialTicks) { } final ProfilerFiller profiler = Profiler.get(); profiler.push("worldeditcui"); - this.ctx.init(new Vector3(this.minecraft.gameRenderer.mainCamera().position()), partialTicks, sink); + this.ctx.init( + new Vector3(this.minecraft.gameRenderer.mainCamera().position()), + partialTicks, + sink, + this.controller.getConfiguration().isHideObstructedLines() + ); final GpuBufferSlice fogStart = RenderSystem.getShaderFog(); RenderSystem.setShaderFog(this.minecraft.gameRenderer.fogRenderer.getBuffer(FogRenderer.FogMode.NONE)); final Matrix4fStack poseStack = RenderSystem.getModelViewStack(); diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIRenderContext.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIRenderContext.java index a399da55..9e05b73d 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIRenderContext.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIRenderContext.java @@ -27,6 +27,7 @@ public final class CUIRenderContext implements RenderSink { private Vector3 cameraPos; private float dt; private RenderSink delegateSink; + private boolean hideObstructedLines; public Vector3 cameraPos() { return this.cameraPos; @@ -54,10 +55,11 @@ public void withCameraAt(final Vector3 pos, final Consumer act } } - void init(final Vector3 cameraPos, final float dt, final RenderSink sink) { + void init(final Vector3 cameraPos, final float dt, final RenderSink sink, final boolean hideObstructedLines) { this.cameraPos = cameraPos; this.dt = dt; this.delegateSink = sink; + this.hideObstructedLines = hideObstructedLines; } /** @@ -66,6 +68,7 @@ void init(final Vector3 cameraPos, final float dt, final RenderSink sink) { void reset() { this.cameraPos = null; this.delegateSink = null; + this.hideObstructedLines = false; } // RenderSink delegation @@ -84,6 +87,9 @@ public CUIRenderContext color(final Colour colour) { @Override public boolean apply(final LineStyle line, final RenderStyle.RenderType type) { + if (this.hideObstructedLines && line.renderType == RenderStyle.RenderType.HIDDEN) { + return false; + } return this.delegateSink.apply(line, type); } diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/RenderStyle.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/RenderStyle.java index df909c6d..5cf1e564 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/RenderStyle.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/RenderStyle.java @@ -33,12 +33,12 @@ public enum RenderType /** * Render type for "hidden" lines (under world geometry) */ - HIDDEN(CompareOp.GREATER_THAN), + HIDDEN(CompareOp.LESS_THAN), /** * Render type for visible lines (over world geometry) */ - VISIBLE(CompareOp.LESS_THAN_OR_EQUAL); + VISIBLE(CompareOp.GREATER_THAN_OR_EQUAL); final CompareOp depthTest; diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java index f38ec80b..1038428a 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java @@ -86,7 +86,7 @@ private static Map createV private static BatchedRenderSink.RenderTarget createQuadsTarget(final String idSuffix, final CompareOp depthTest) { final RenderPipeline pipeline = RenderPipeline.builder(QUADS_SNIPPET) .withLocation(Identifier.fromNamespaceAndPath("worldeditcui", "pipeline/quads_" + idSuffix)) - .withDepthStencilState(new DepthStencilState(depthTest, true)) + .withDepthStencilState(new DepthStencilState(depthTest, false)) .build(); if (IRIS_LOADED) { IrisPipelineIntegration.registerQuads(pipeline); @@ -105,7 +105,7 @@ private static BatchedRenderSink.RenderTarget createQuadsTarget(final String idS private static BatchedRenderSink.RenderTarget createLinesTarget(final String idSuffix, final CompareOp depthTest) { final RenderPipeline pipeline = RenderPipeline.builder(LINES_SNIPPET) .withLocation(Identifier.fromNamespaceAndPath("worldeditcui", "pipeline/lines_" + idSuffix)) - .withDepthStencilState(new DepthStencilState(depthTest, true)) + .withDepthStencilState(new DepthStencilState(depthTest, false)) .build(); if (IRIS_LOADED) { IrisPipelineIntegration.registerLines(pipeline); diff --git a/worldeditcui-fabric/src/main/resources/assets/worldeditcui/lang/en_us.json b/worldeditcui-fabric/src/main/resources/assets/worldeditcui/lang/en_us.json index 8cb54396..4eb2a9f8 100644 --- a/worldeditcui-fabric/src/main/resources/assets/worldeditcui/lang/en_us.json +++ b/worldeditcui-fabric/src/main/resources/assets/worldeditcui/lang/en_us.json @@ -39,6 +39,8 @@ "worldeditcui.options.extra.title": "Advanced Options", "worldeditcui.options.extra.clearall": "Clear displayed regions", "worldeditcui.options.extra.clearall.tooltip": "Clear all displayed regions when %s (%s) is pressed", + "worldeditcui.options.extra.hideObstructedLines": "Hide obstructed lines", + "worldeditcui.options.extra.hideObstructedLines.tooltip": "Do not render selection lines behind blocks or other world geometry", "worldeditcui.options.done": "Done", "worldeditcui.options.debugMode": "Debug Mode", "worldeditcui.options.debugMode.tooltip": "Enable advanced Debug Mode"