From 29f634b616b9271836fded075aff3378a989b7e6 Mon Sep 17 00:00:00 2001 From: xTracr Date: Fri, 3 May 2024 19:10:21 +0800 Subject: [PATCH] Allowed disabling based on texture id --- .../com/xtracr/realcamera/RealCameraCore.java | 22 ++- .../realcamera/config/BindingTarget.java | 6 +- .../xtracr/realcamera/gui/ModelAnalyser.java | 38 +++-- .../realcamera/gui/ModelViewScreen.java | 135 ++++++++++++------ .../realcamera/util/VertexRecorder.java | 4 - .../assets/realcamera/lang/en_us.json | 10 +- .../assets/realcamera/lang/zh_cn.json | 10 +- .../assets/realcamera/textures/gui/icon.png | Bin 5422 -> 5602 bytes gradle.properties | 2 +- 9 files changed, 152 insertions(+), 75 deletions(-) diff --git a/common/src/main/java/com/xtracr/realcamera/RealCameraCore.java b/common/src/main/java/com/xtracr/realcamera/RealCameraCore.java index f91aeb3..fa73b34 100644 --- a/common/src/main/java/com/xtracr/realcamera/RealCameraCore.java +++ b/common/src/main/java/com/xtracr/realcamera/RealCameraCore.java @@ -7,7 +7,6 @@ import com.xtracr.realcamera.util.MathUtil; import com.xtracr.realcamera.util.VertexRecorder; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.util.math.MatrixStack; @@ -19,8 +18,6 @@ import org.joml.Matrix4f; import org.joml.Vector3f; -import java.util.function.BiFunction; - public class RealCameraCore { private static final VertexRecorder recorder = new VertexRecorder(); public static BindingTarget currentTarget = new BindingTarget(); @@ -100,15 +97,16 @@ public static void renderCameraEntity(VertexConsumerProvider vertexConsumers) { .rotate(RotationAxis.POSITIVE_Y.rotationDegrees(yaw + 180.0f)) .transpose().invert(); Matrix4f positionMatrix = new Matrix4f(normalMatrix).translate(offset.subtract(pos).toVector3f()); - BiFunction function = (renderLayer, vertices) -> { - double depth = currentTarget.disablingDepth; - int count = vertices.length; - VertexRecorder.Vertex[] quad = new VertexRecorder.Vertex[count]; - for (int i = 0; i < count; i++) quad[i] = vertices[i].transform(positionMatrix, normalMatrix); - for (VertexRecorder.Vertex vertex : quad) if (vertex.z() < -depth) return quad; - return null; - }; - recorder.drawByAnother(vertexConsumers, renderLayer -> true, function); + recorder.drawByAnother(vertexConsumers, + renderLayer -> currentTarget.disabledTextureIds.stream().noneMatch(renderLayer.toString()::contains), + (renderLayer, vertices) -> { + double depth = currentTarget.disablingDepth; + int count = vertices.length; + VertexRecorder.Vertex[] quad = new VertexRecorder.Vertex[count]; + for (int i = 0; i < count; i++) quad[i] = vertices[i].transform(positionMatrix, normalMatrix); + for (VertexRecorder.Vertex vertex : quad) if (vertex.z() < -depth) return quad; + return null; + }); } public static void computeCamera() { diff --git a/common/src/main/java/com/xtracr/realcamera/config/BindingTarget.java b/common/src/main/java/com/xtracr/realcamera/config/BindingTarget.java index e608632..4fe603f 100644 --- a/common/src/main/java/com/xtracr/realcamera/config/BindingTarget.java +++ b/common/src/main/java/com/xtracr/realcamera/config/BindingTarget.java @@ -2,6 +2,7 @@ import net.minecraft.util.math.MathHelper; +import java.util.ArrayList; import java.util.List; public class BindingTarget { @@ -9,6 +10,7 @@ public class BindingTarget { createDefaultTarget("skin_head", "minecraft:skins/", 5, false), createDefaultTarget("minecraft_head_2", "minecraft:textures/entity/player/", 0, true), createDefaultTarget("skin_head_2", "minecraft:skins/", 0, true)); + public List disabledTextureIds = new ArrayList<>(); public final String name, textureId; public final int priority; public final float forwardU, forwardV, upwardU, upwardV, posU, posV, disablingDepth; @@ -45,7 +47,9 @@ public BindingTarget(String name, String textureId, int priority, float forwardU } private static BindingTarget createDefaultTarget(String name, String textureId, int priority, boolean shouldBind) { - return new BindingTarget(name, textureId, priority, 0.1875f, 0.2f, 0.1875f, 0.075f, 0.1875f, 0.2f, 0.2f, shouldBind, true, shouldBind, shouldBind, 1, -0.12, 0, 0, 0, 0, 0); + BindingTarget target = new BindingTarget(name, textureId, priority, 0.1875f, 0.2f, 0.1875f, 0.075f, 0.1875f, 0.2f, 0.2f, shouldBind, true, shouldBind, shouldBind, 1, -0.12, 0, 0, 0, 0, 0); + target.disabledTextureIds.add("minecraft:textures/entity/enderdragon/dragon.png"); + return target; } public boolean isEmpty() { diff --git a/common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java b/common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java index 52e880e..e9882a8 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java @@ -17,6 +17,8 @@ import java.util.List; public class ModelAnalyser extends VertexRecorder { + private static final int quadArgb = 0x6F3333CC, forwardArgb = 0xFF00CC00, upwardArgb = 0xFFCC0000, leftArgb = 0xFF0000CC; + private static final int focusedArgb = 0x7FFFFFFF, sideArgb = 0x3FFFFFFF; private final BindingTarget target; private final Matrix3f normal = new Matrix3f(); private final Vector3f position = new Vector3f(); @@ -99,9 +101,12 @@ public Vec2f getFocusedUV() { return new Vec2f(u / quad.length, v / quad.length); } - public void previewEffect(DrawContext context, int entitySize, int forwardArgb, int upwardArgb, int leftArgb) { - drawByAnother(context.getVertexConsumers()); + public void previewEffect(DrawContext context, int entitySize, boolean canSelect, boolean hideDisabled, String disabledTextureId) { + drawByAnother(context.getVertexConsumers(), + renderLayer -> !canSelect || hideDisabled || disabledTextureId.isEmpty() || !renderLayer.toString().contains(disabledTextureId), + (renderLayer, vertices) -> vertices); context.draw(); + if (canSelect) drawFocused(context); if (normal.m00() == 0 && normal.m11() == 0 && normal.m22() == 0) return; Vec3d start = new Vec3d(position); drawNormal(context, start, new Vec3d(normal.m20(), normal.m21(), -normal.m22()), entitySize / 3, forwardArgb); @@ -109,10 +114,11 @@ public void previewEffect(DrawContext context, int entitySize, int forwardArgb, drawNormal(context, start, new Vec3d(normal.m00(), normal.m01(), -normal.m02()), entitySize / 6, leftArgb); } - public void drawModelWithNormals(DrawContext context, int entitySize, int quadArgb, int forwardArgb, int upwardArgb, int faceArgb, int sideArgb) { - drawByAnother(context.getVertexConsumers()); + public void drawModelWithNormals(DrawContext context, int entitySize) { + drawByAnother(context.getVertexConsumers(), renderLayer -> true, (renderLayer, vertices) -> vertices); context.draw(); - drawPolyhedron(context, faceArgb, sideArgb); + drawPolyhedron(context); + drawFocused(context); if (currentRecord == null) return; Vertex[] quad; if ((quad = getQuad(currentRecord, target.posU, target.posV)) != null) @@ -123,11 +129,20 @@ public void drawModelWithNormals(DrawContext context, int entitySize, int quadAr drawNormal(context, getPos(quad, target.upwardU, target.upwardV), quad[0].normal(), entitySize / 2, upwardArgb); } - private void drawPolyhedron(DrawContext context, int argb1, int argb2) { + private void drawFocused(DrawContext context) { + if (focusedIndex == -1 || focusedRecord == null) return; + Vertex[] focused = focusedRecord.vertices()[focusedIndex]; + drawQuad(context, focused, focusedArgb, 1100); + int size = focused.length; + Vertex[] reversed = new Vertex[size]; + for (int i = 0; i < size; i++) reversed[i] = focused[size - 1 - i]; + drawQuad(context, reversed, focusedArgb, 1100); + } + + private void drawPolyhedron(DrawContext context) { if (focusedIndex == -1 || focusedRecord == null) return; - Vertex[] highlight = focusedRecord.vertices()[focusedIndex]; List polyhedron = new ArrayList<>(); - polyhedron.add(highlight); + polyhedron.add(focusedRecord.vertices()[focusedIndex]); List indexes = new ArrayList<>(List.of(focusedIndex)); Vertex[][] vertices = focusedRecord.vertices(); boolean added; @@ -151,12 +166,7 @@ private void drawPolyhedron(DrawContext context, int argb1, int argb2) { if (!indexes.contains(i)) break; resultIndexes.add(i); } - resultIndexes.forEach(i -> drawQuad(context, vertices[i], argb2, 1000)); - drawQuad(context, highlight, argb1, 1100); - size = highlight.length; - Vertex[] reversed = new Vertex[size]; - for (int i = 0; i < size; i++) reversed[i] = highlight[size - 1 - i]; - drawQuad(context, reversed, argb1, 1100); + resultIndexes.forEach(i -> drawQuad(context, vertices[i], sideArgb, 1000)); } record Triple(double depth, BuiltRecord record, int index) {} diff --git a/common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java b/common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java index f7a0b04..7a666f0 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java @@ -9,6 +9,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.*; import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.entity.EntityRenderDispatcher; @@ -24,6 +25,7 @@ import org.joml.Vector3f; import org.lwjgl.glfw.GLFW; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -36,9 +38,11 @@ public class ModelViewScreen extends Screen { private float xRot, yRot; private String focusedTextureId; private Vec2f focusedUV; - private TextFieldWidget textureIdField, nameField; + private TextFieldWidget textureIdField, nameField, disabledIdField; private NumberFieldWidget forwardUField, forwardVField, upwardUField, upwardVField, posUField, posVField, scaleField, depthField; private NumberFieldWidget priorityField; + private List idsInClipBoard = new ArrayList<>(); + private final List disabledIds = new ArrayList<>(); private final CyclingButtonWidget selectingButton = createCyclingButton(Map.of( 0, LocUtil.MODEL_VIEW_WIDGET("forwardMode").styled(s -> s.withColor(Formatting.GREEN)), 1, LocUtil.MODEL_VIEW_WIDGET("upwardMode").styled(s -> s.withColor(Formatting.RED)), @@ -49,6 +53,7 @@ public class ModelViewScreen extends Screen { private final CyclingTexturedButton bindYButton = new CyclingTexturedButton(16, 0, 0, 2); private final CyclingTexturedButton bindZButton = new CyclingTexturedButton(16, 0, 1, 2); private final CyclingTexturedButton bindRotButton = new CyclingTexturedButton(16, 0, 1, 2); + private final CyclingTexturedButton showDisabled = new CyclingTexturedButton(48, 0, 0, 2); private final DoubleSliderWidget entityPitchSlider = createSlider("pitch", widgetWidth * 2 + 4, -90.0, 90.0); private final DoubleSliderWidget entityYawSlider = createSlider("yaw", widgetWidth * 2 + 4, -60.0, 60.0); private final DoubleSliderWidget offsetXSlider = createSlider("offsetX", widgetWidth * 2 - 18, ModConfig.MIN_DOUBLE, ModConfig.MAX_DOUBLE); @@ -86,16 +91,10 @@ private void initWidgets(int category, int page) { xRot = yRot = 0; layers = 0; })); - initRightWidgets(page); + initRightWidgets(category, page); } private void initLeftWidgets(final int category) { - GridWidget gridWidget = new GridWidget(); - gridWidget.getMainPositioner().margin(4, 2, 0, 0); - Positioner smallPositioner = gridWidget.copyPositioner().margin(5, 3, 1, 1); - GridWidget.Adder adder = gridWidget.createAdder(2); - adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("settings"), widgetWidth, button -> initWidgets(0, page))); - adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("preview"), widgetWidth, button -> initWidgets(1, page))); forwardUField = createFloatField(widgetWidth, 0, forwardUField); forwardVField = createFloatField(widgetWidth, 0, forwardVField); upwardUField = createFloatField(widgetWidth, 0, upwardUField); @@ -108,7 +107,13 @@ private void initLeftWidgets(final int category) { textureIdField.setText(textureId); scaleField = createFloatField(widgetWidth, 1.0f, scaleField).setMax(64.0f); depthField = createFloatField(widgetWidth, 0.2f, depthField).setMax(16.0f); - if (category == 0) { + GridWidget gridWidget = new GridWidget(); + gridWidget.getMainPositioner().margin(4, 2, 0, 0); + Positioner smallPositioner = gridWidget.copyPositioner().margin(5, 3, 1, 1); + GridWidget.Adder adder = gridWidget.createAdder(2); + adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("settings"), widgetWidth, button -> initWidgets(0, page))); + adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("preview"), widgetWidth, button -> initWidgets(category | 0b01, page))); + if ((category & 0b1) == 0) { adder.add(entityPitchSlider, 2); adder.add(entityYawSlider, 2); adder.add(selectingButton, 2).setTooltip(LocUtil.MODEL_VIEW_TOOLTIP("selectMode")); @@ -119,7 +124,7 @@ private void initLeftWidgets(final int category) { adder.add(posUField, 1, smallPositioner); adder.add(posVField, 1, smallPositioner); adder.add(textureIdField, 2, smallPositioner).setTooltip(LocUtil.MODEL_VIEW_TOOLTIP("textureId")); - } else if (category == 1) { + } else { Positioner sliderPositioner = gridWidget.copyPositioner().margin(-20, 2, 0, 0); adder.add(bindXButton, 1, smallPositioner).setTooltip(LocUtil.MODEL_VIEW_TOOLTIP("bindButtons")); adder.add(offsetXSlider, 1, sliderPositioner); @@ -157,28 +162,67 @@ private void initLeftWidgets(final int category) { gridWidget.forEachChild(this::addDrawableChild); } - private void initRightWidgets(final int page) { - List targetList = ConfigFile.config().getTargetList(); - final int widgetsPerPage = 9, pages = (targetList.size() - 1) / widgetsPerPage + 1; + private void initRightWidgets(final int category, final int page) { + disabledIdField = createTextField(widgetWidth * 2 + 4, disabledIdField); + disabledIdField.setMaxLength(1024); GridWidget gridWidget = new GridWidget(); gridWidget.getMainPositioner().margin(4, 2, 0, 0); Positioner smallPositioner = gridWidget.copyPositioner().margin(5, 3, 1, 1); - GridWidget.Adder adder = gridWidget.createAdder(2); - addDrawableChild(new TexturedButton(x + (xSize + ySize) / 2 + 8, y + 4, 16, 16, 0, 32, button -> initWidgets(category, (page - 1 + pages) % pages))); - addDrawableChild(new TextWidget(x + (xSize + ySize) / 2 + 30, y + 4, widgetWidth * 2 - 40, widgetHeight, LocUtil.literal((page + 1) + " / " + pages), textRenderer)); - addDrawableChild(new TexturedButton(x + xSize - 21, y + 4, 16, 16, 16, 32, button -> initWidgets(category, (page + 1) % pages))); - for (int i = page * widgetsPerPage; i < Math.min((page + 1) * widgetsPerPage, targetList.size()); i++) { - BindingTarget target = targetList.get(i); - String name = target.name; - adder.add(createButton(LocUtil.literal(name), widgetWidth * 2 - 18, button -> loadBindingTarget(target))); - adder.add(new TexturedButton(32, 32, button -> { - targetList.remove(target); - ConfigFile.save(); - initWidgets(category, page * widgetsPerPage >= targetList.size() && !targetList.isEmpty() ? page - 1 : page); - }), 1, smallPositioner).setTooltip(LocUtil.MODEL_VIEW_TOOLTIP("delete")); + GridWidget.Adder adder = gridWidget.createAdder(4); + adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("configs"), widgetWidth, button -> initWidgets(category & 0b01, 0)), 2).setTooltip(LocUtil.MODEL_VIEW_TOOLTIP("configs")); + adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("disable"), widgetWidth, button -> initWidgets(0b11, 0)), 2).setTooltip(LocUtil.MODEL_VIEW_TOOLTIP("disable")); + final int widgetsPerPage, size; + if ((category & 0b10) == 0) { + widgetsPerPage = 8; + List targetList = ConfigFile.config().getTargetList(); + size = targetList.size(); + for (int i = page * widgetsPerPage; i < Math.min((page + 1) * widgetsPerPage, size); i++) { + BindingTarget target = targetList.get(i); + String name = target.name; + adder.add(createButton(LocUtil.literal(name), widgetWidth * 2 - 18, button -> loadBindingTarget(target)), 3).setTooltip(Tooltip.of(LocUtil.literal(name))); + adder.add(new TexturedButton(32, 32, button -> { + targetList.remove(target); + ConfigFile.save(); + initWidgets(category, page * widgetsPerPage > size - 2 && size > 1 ? page - 1 : page); + }), 1, smallPositioner); + } + } else { + widgetsPerPage = 5; + size = disabledIds.size(); + adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("copy"), widgetWidth, button -> idsInClipBoard = List.copyOf(disabledIds)), 2).setTooltip(LocUtil.MODEL_VIEW_TOOLTIP("copy")); + adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("paste"), widgetWidth, button -> { + disabledIds.clear(); + disabledIds.addAll(idsInClipBoard); + initWidgets(category, 0); + }), 2); + adder.add(disabledIdField, 4, smallPositioner).setTooltip(LocUtil.MODEL_VIEW_TOOLTIP("disabledIdField")); + if (disabledIdField.getText().isEmpty() && size > 0) disabledIdField.setText(disabledIds.get(0)); + adder.add(createButton(LocUtil.MODEL_VIEW_WIDGET("clear"), widgetWidth, button -> { + disabledIds.clear(); + initWidgets(category, 0); + }), 2); + adder.add(showDisabled, 1, gridWidget.copyPositioner().margin(7, 3, 1, 1)); + adder.add(new TexturedButton(0, 48, button -> { + String disabledId = disabledIdField.getText(); + if (disabledIds.contains(disabledId)) return; + disabledIds.add(disabledId); + initWidgets(category, page); + }), 1, smallPositioner); + for (int i = page * widgetsPerPage; i < Math.min((page + 1) * widgetsPerPage, size); i++) { + String textureId = disabledIds.get(i); + adder.add(createButton(LocUtil.literal(textureId), widgetWidth * 2 - 18, button -> disabledIdField.setText(textureId)), 3).setTooltip(Tooltip.of(LocUtil.literal(textureId))); + adder.add(new TexturedButton(32, 32, button -> { + disabledIds.remove(textureId); + initWidgets(category, page * widgetsPerPage > size - 2 && size > 1 ? page - 1 : page); + }), 1, smallPositioner); + } } + final int pages = (size - 1) / widgetsPerPage + 1; + addDrawableChild(new TexturedButton(x + (xSize + ySize) / 2 + 8, y + ySize - 20, 16, 16, 0, 32, button -> initWidgets(category, (page - 1 + pages) % pages))); + addDrawableChild(new TextWidget(x + (xSize + ySize) / 2 + 30, y + ySize - 20, widgetWidth * 2 - 40, widgetHeight, LocUtil.literal((page + 1) + " / " + pages), textRenderer)); + addDrawableChild(new TexturedButton(x + xSize - 21, y + ySize - 20, 16, 16, 16, 32, button -> initWidgets(category, (page + 1) % pages))); gridWidget.refreshPositions(); - SimplePositioningWidget.setPos(gridWidget, x + (xSize + ySize) / 2 + 4, y + 22, x + xSize, y + ySize, 0, 0); + SimplePositioningWidget.setPos(gridWidget, x + (xSize + ySize) / 2 + 4, y + 2, x + xSize, y + ySize, 0, 0); gridWidget.forEachChild(this::addDrawableChild); } @@ -236,23 +280,28 @@ protected void drawEntity(DrawContext context, float x, float y, int mouseX, int analyser.initialize(entitySize, mouseX, mouseY, layers); focusedUV = analyser.getFocusedUV(); focusedTextureId = analyser.focusedTextureId(); - if (category == 1) analyser.previewEffect(context, entitySize, 0xFF00CC00, 0xFFCC0000, 0xFF0000CC); - else analyser.drawModelWithNormals(context, entitySize, 0x6F3333CC, 0xFF00CC00, 0xFFCC0000, 0x7FFFFFFF, 0x3FFFFFFF); + if ((category & 0b1) == 0) analyser.drawModelWithNormals(context, entitySize); + else analyser.previewEffect(context, entitySize, (category & 0b10) == 2, showDisabled.getValue() == 0, disabledIdField.getText()); entityRenderDispatcher.setRenderShadows(true); context.getMatrices().pop(); DiffuseLighting.enableGuiDepthLighting(); } protected BindingTarget generateBindingTarget() { - return new BindingTarget(nameField.getText(), textureIdField.getText(), priorityField.getValue(), forwardUField.getValue(), forwardVField.getValue(), + BindingTarget target = new BindingTarget(nameField.getText(), textureIdField.getText(), priorityField.getValue(), forwardUField.getValue(), forwardVField.getValue(), upwardUField.getValue(), upwardVField.getValue(), posUField.getValue(), posVField.getValue(), depthField.getValue(), bindXButton.getValue() == 0, bindYButton.getValue() == 0, bindZButton.getValue() == 0, bindRotButton.getValue() == 0, scaleField.getValue(), offsetXSlider.getValue(), offsetYSlider.getValue(), offsetZSlider.getValue(), (float) pitchSlider.getValue(), (float) yawSlider.getValue(), (float) rollSlider.getValue()); + target.disabledTextureIds.clear(); + target.disabledTextureIds.addAll(disabledIds); + return target; } protected void loadBindingTarget(BindingTarget target) { if (target.isEmpty()) return; + disabledIds.clear(); + disabledIds.addAll(target.disabledTextureIds); nameField.setText(target.name); textureIdField.setText(target.textureId); priorityField.setValue(target.priority); @@ -302,19 +351,23 @@ protected boolean mouseInViewArea(double mouseX, double mouseY) { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (mouseInViewArea(mouseX, mouseY) && category == 0 && focusedUV != null && button == GLFW.GLFW_MOUSE_BUTTON_LEFT && + if (mouseInViewArea(mouseX, mouseY) && focusedUV != null && button == GLFW.GLFW_MOUSE_BUTTON_LEFT && InputUtil.isKeyPressed(client.getWindow().getHandle(), GLFW.GLFW_KEY_LEFT_ALT)) { - if (selectingButton.getValue() == 0) { - forwardUField.setValue(focusedUV.x); - forwardVField.setValue(focusedUV.y); - } else if (selectingButton.getValue() == 1) { - upwardUField.setValue(focusedUV.x); - upwardVField.setValue(focusedUV.y); - } else { - posUField.setValue(focusedUV.x); - posVField.setValue(focusedUV.y); + if (category == 0) { + if (selectingButton.getValue() == 0) { + forwardUField.setValue(focusedUV.x); + forwardVField.setValue(focusedUV.y); + } else if (selectingButton.getValue() == 1) { + upwardUField.setValue(focusedUV.x); + upwardVField.setValue(focusedUV.y); + } else { + posUField.setValue(focusedUV.x); + posVField.setValue(focusedUV.y); + } + textureIdField.setText(focusedTextureId); + } else if (category == 0b11) { + disabledIdField.setText(focusedTextureId); } - textureIdField.setText(focusedTextureId); return true; } return super.mouseClicked(mouseX, mouseY, button); diff --git a/common/src/main/java/com/xtracr/realcamera/util/VertexRecorder.java b/common/src/main/java/com/xtracr/realcamera/util/VertexRecorder.java index fea9cee..2d42e2c 100644 --- a/common/src/main/java/com/xtracr/realcamera/util/VertexRecorder.java +++ b/common/src/main/java/com/xtracr/realcamera/util/VertexRecorder.java @@ -75,10 +75,6 @@ public BuiltRecord getTargetPosAndRot(BindingTarget target, Matrix3f normal, Vec }).filter(Objects::nonNull).findFirst().orElse(null); } - public void drawByAnother(VertexConsumerProvider anotherProvider) { - drawByAnother(anotherProvider, renderLayer -> true, (renderLayer, vertices) -> vertices); - } - public void drawByAnother(VertexConsumerProvider anotherProvider, Predicate layerPredicate, BiFunction function) { records.forEach(record -> { RenderLayer renderLayer = record.renderLayer; diff --git a/common/src/main/resources/assets/realcamera/lang/en_us.json b/common/src/main/resources/assets/realcamera/lang/en_us.json index c002147..81b9421 100644 --- a/common/src/main/resources/assets/realcamera/lang/en_us.json +++ b/common/src/main/resources/assets/realcamera/lang/en_us.json @@ -64,6 +64,11 @@ "screen.widget.xtracr_realcamera.modelView_pitch": "Pitch = %s", "screen.widget.xtracr_realcamera.modelView_yaw": "Yaw = %s", "screen.widget.xtracr_realcamera.modelView_roll": "Roll = %s", + "screen.widget.xtracr_realcamera.modelView_configs": "Configs", + "screen.widget.xtracr_realcamera.modelView_disable": "Disable", + "screen.widget.xtracr_realcamera.modelView_copy": "Copy", + "screen.widget.xtracr_realcamera.modelView_paste": "Paste", + "screen.widget.xtracr_realcamera.modelView_clear": "Clear", "screen.tooltip.xtracr_realcamera.modelView_selectMode": "Hold left Alt and left click to get the UV coordinates at the mouse pointer\nThe three sets of UV coordinates below are, from top to bottom, the UV coordinates of the forward vector, the upward vector, and a point on the target plane\nNote: Scroll with left Alt held to switch between the different layers of the model. Manually inputting UV coordinates allows you to bind more accurately to the target position", "screen.tooltip.xtracr_realcamera.modelView_textureId": "The texture id of the selected model (not necessary to be the full id), can be shortened when saving to make it easier to recognize.\nFor example, shorten minecraft:textures/entity/player/slim/alex.png to minecraft:textures/entity/player/.", "screen.tooltip.xtracr_realcamera.modelView_bindButtons": "When disabled, the camera's relative relationship to the model will not change, but the camera's corresponding attributes will not be modified by this mod", @@ -71,5 +76,8 @@ "screen.tooltip.xtracr_realcamera.modelView_depth": "Planes where all vertex-to-screen distances are less than this value will not be rendered", "screen.tooltip.xtracr_realcamera.modelView_priority": "Priority when binding, the larger the value the higher the priority, and the higher the sorting on the right side", "screen.tooltip.xtracr_realcamera.modelView_targetName": "Name of the config", - "screen.tooltip.xtracr_realcamera.modelView_delete": "Delete" + "screen.tooltip.xtracr_realcamera.modelView_configs": "Saved Configs", + "screen.tooltip.xtracr_realcamera.modelView_disable": "Disabling Settings\nGlobal disabling settings are in the config screen", + "screen.tooltip.xtracr_realcamera.modelView_copy": "Copy all entries", + "screen.tooltip.xtracr_realcamera.modelView_disabledIdField": "Hold left Alt and left click to get the texture id of the selected model, can be shortened to extend disabling range, but may cause the program to misjudge" } \ No newline at end of file diff --git a/common/src/main/resources/assets/realcamera/lang/zh_cn.json b/common/src/main/resources/assets/realcamera/lang/zh_cn.json index 17ac37f..9b1062b 100644 --- a/common/src/main/resources/assets/realcamera/lang/zh_cn.json +++ b/common/src/main/resources/assets/realcamera/lang/zh_cn.json @@ -64,6 +64,11 @@ "screen.widget.xtracr_realcamera.modelView_pitch": "俯仰角 = %s", "screen.widget.xtracr_realcamera.modelView_yaw": "偏航角 = %s", "screen.widget.xtracr_realcamera.modelView_roll": "翻滚角 = %s", + "screen.widget.xtracr_realcamera.modelView_configs": "配置", + "screen.widget.xtracr_realcamera.modelView_disable": "禁用", + "screen.widget.xtracr_realcamera.modelView_copy": "复制", + "screen.widget.xtracr_realcamera.modelView_paste": "粘贴", + "screen.widget.xtracr_realcamera.modelView_clear": "清空", "screen.tooltip.xtracr_realcamera.modelView_selectMode": "按住左Alt并左键可获取鼠标指针处的UV坐标\n下方三组UV坐标由上到下依次为向前矢量、向上矢量和目标平面上一个点的UV坐标\n注:按住左Alt键滚动可在模型的不同层间切换,手动输入UV坐标可以更加精确地绑定到目标位置", "screen.tooltip.xtracr_realcamera.modelView_textureId": "被选中的模型的纹理的id(不是完整的id也可以识别),保存时可以缩短一部分以便于程序识别\n比如将minecraft:textures/entity/player/slim/alex.png缩短为minecraft:textures/entity/player/", "screen.tooltip.xtracr_realcamera.modelView_bindButtons": "当禁用时,摄像头与模型的相对关系不会变化,但摄像头的对应属性不会被本模组修改", @@ -71,5 +76,8 @@ "screen.tooltip.xtracr_realcamera.modelView_depth": "全部顶点到屏幕距离均小于该值的面不会被渲染", "screen.tooltip.xtracr_realcamera.modelView_priority": "绑定时的优先级,值越大优先级越高,并且在右侧排序越靠前", "screen.tooltip.xtracr_realcamera.modelView_targetName": "配置的名称", - "screen.tooltip.xtracr_realcamera.modelView_delete": "删除" + "screen.tooltip.xtracr_realcamera.modelView_configs": "已保存的配置", + "screen.tooltip.xtracr_realcamera.modelView_disable": "禁用设置\n全局禁用设置在配置屏幕中", + "screen.tooltip.xtracr_realcamera.modelView_copy": "复制所有项", + "screen.tooltip.xtracr_realcamera.modelView_disabledIdField": "按住左Alt并左键以获取被选中的模型的纹理的id,可以缩短一部分来扩大禁用范围,但可能造成程序误判" } \ No newline at end of file diff --git a/common/src/main/resources/assets/realcamera/textures/gui/icon.png b/common/src/main/resources/assets/realcamera/textures/gui/icon.png index 50681e9391982363c57a3a8afd888b4ee5497b6b..8e5f888bdab5027c23cbe9576e58b4327f0237e2 100644 GIT binary patch delta 769 zcmZ3d^+rXDAQjV6Qc`P><@ zYxo}J9GJdOkD;F9fFYB>$>a6SKdKt0v;BSgoT-7KN4#N$g?Yhet$k(}Ha}-!V3g2i zD182Wi8ljdLo&O<+-KM4o!rjSP&u6;bo!?`EG*L*W7$}w8*^Bgq8nKmKn^*?utQb? z$T%Q$KnNtT;HS}p>yFFKJp!AVu3?3v0rQ zn+`?B0lTs}3j=@$7zY1A_v?WVQ$2KbKf4Fc`cSQs`|^W$>vH zGO&Do|F54@fn>phUWeBI>;=M%j1COXZgGTE*Eum92ulF+SQuCiygl%tjPZtbL)=+; z!7{dl_p9G)@2|fvFUZ1BQNWONn1PS6p^`~}m)RnUX~Nyz@l}2d4?Z$>$gY2I(TMrP zy<4Yw80JYgyfA3Z=Q?p~_iru+8#@Ny;2(Y79jR~cS8_6NG%x_&^FT%6fssOjvOt2i zfdWIr?Z(DF#sYzdz0(=^lsFg+q8W0IvN8%V2rw`*0I3-&#thfrFP|<57Vu_Z2RcT8 z!GVDxx{;BQ;SL`Uj~D|x<77n<`Nqe-ics3bMjzHAbL^ e!RA012}<{ELp{Z2{Y<#c00f?{elF{r5}E*%F$x#} delta 541 zcmaE)y-sU`6ECMxh@pv-)Xzr*w}oINx;~?@fec;=Y3uYn+yYn?8$eYw7W4U z%;cA2^r`t!FBKqjz)eBA@jzID0|Nsi1JFNAo3JZb&xBiXUIU z-n>JB!Qm;xkv2{lCWf~x3Px%LPgoLUj^BK3cb=2s3crKTn;*P#mf8&~Ieco>7y`^0 z0uwmri%$5?X}?`dfMJDr!y46^gYF&2kHlB02mqbN%qhpn5YNOE$IN8L#JG)#nTg>? zal!$67DmPb;mM7n){`AX#8?Cv%o!&uih4{=5anV*h);ebVgi(xN1_eI8-A@5NC~;Q T%bvTM0SG)@{an^LB{Ts5O<1f} diff --git a/gradle.properties b/gradle.properties index 5c3786b..bf3d743 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ forge_version=1.20.1-47.2.30 fabric_loader_version=0.15.10 yarn_mappings=1.20.1+build.10 # Mod Properties -mod_version=0.6.1-alpha.4 +mod_version=0.6.1-alpha.5 maven_group=com.xtracr.realcamera archives_base_name=realcamera # Dependencies