From 7adbdd30e4c515e7253289dae4c2109d816d9521 Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Tue, 9 Dec 2025 15:01:01 +0200 Subject: [PATCH] More GUI NPC rendering improvements --- .../companion/GuiNpcCompanionStats.java | 2 +- .../gui/select/GuiTextureSelection.java | 9 +-- .../npcs/client/gui/util/GuiNPCInterface.java | 61 ++++++++++++------- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionStats.java b/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionStats.java index ad79fbefd..30f8e422d 100644 --- a/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionStats.java +++ b/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionStats.java @@ -35,6 +35,7 @@ public class GuiNpcCompanionStats extends GuiNPCInterface implements IGuiData { ySize = 166; PacketClient.sendClient(new GetNPCRole()); + drawNpc = true; xOffsetNpc = 34; yOffsetNpc = 150; } @@ -99,7 +100,6 @@ public class GuiNpcCompanionStats extends GuiNPCInterface implements IGuiData { } isEating = role.isEating(); - super.drawNpc(npc, i, j, f); int y = drawHealth(guiTop + 88); } diff --git a/src/main/java/noppes/npcs/client/gui/select/GuiTextureSelection.java b/src/main/java/noppes/npcs/client/gui/select/GuiTextureSelection.java index a2093ec3e..4f1bccfaf 100644 --- a/src/main/java/noppes/npcs/client/gui/select/GuiTextureSelection.java +++ b/src/main/java/noppes/npcs/client/gui/select/GuiTextureSelection.java @@ -147,9 +147,10 @@ public class GuiTextureSelection extends SubGuiInterface implements ICustomScrol location = selectedResource.getResourcePath().substring(0, i + 1); } + drawNpc = true; xOffsetNpc = 307; yOffsetNpc = 150; - zoomed = 1.5f; + defaultZoom = zoom = 1.5f; } private File decodeFile(String url) { @@ -252,12 +253,6 @@ public class GuiTextureSelection extends SubGuiInterface implements ICustomScrol parent.initGui(); } - @Override - public void drawScreen(int i, int j, float f) { - super.drawScreen(i, j, f); - drawNpc(npc, i, j, f); - } - @Override public void customScrollClicked(int i, int j, int k, GuiCustomScroll scroll) { if (scroll == scrollTextures) { diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java b/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java index cbd661b69..ad28c1e07 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java @@ -96,10 +96,10 @@ public abstract class GuiNPCInterface extends GuiScreen { Keyboard.enableRepeatEvents(true); if (drawRenderButtons) { - addButton(zoomIn = new GuiNpcButton(0, guiLeft + xOffsetNpc + xOffsetButton, guiTop + yOffsetNpc + yOffsetButton, 20, 20, "-")); - addButton(zoomOut = new GuiNpcButton(0, guiLeft + 22 + xOffsetNpc + xOffsetButton, guiTop + yOffsetNpc + yOffsetButton, 20, 20, "+")); - addButton(rotateLeft = new GuiNpcButton(0, guiLeft + 44 + xOffsetNpc + xOffsetButton, guiTop + yOffsetNpc + yOffsetButton, 20, 20, "<")); - addButton(rotateRight = new GuiNpcButton(0, guiLeft + 66 + xOffsetNpc + xOffsetButton, guiTop + yOffsetNpc + yOffsetButton, 20, 20, ">")); + zoomIn = new GuiNpcButton(0, guiLeft + xOffsetNpc + xOffsetButton, guiTop + yOffsetNpc + yOffsetButton, 20, 20, "-"); + zoomOut = new GuiNpcButton(0, guiLeft + 22 + xOffsetNpc + xOffsetButton, guiTop + yOffsetNpc + yOffsetButton, 20, 20, "+"); + rotateLeft = new GuiNpcButton(0, guiLeft + 44 + xOffsetNpc + xOffsetButton, guiTop + yOffsetNpc + yOffsetButton, 20, 20, "<"); + rotateRight = new GuiNpcButton(0, guiLeft + 66 + xOffsetNpc + xOffsetButton, guiTop + yOffsetNpc + yOffsetButton, 20, 20, ">"); } } @@ -356,6 +356,9 @@ public abstract class GuiNPCInterface extends GuiScreen { if (subgui != null) { subgui.drawScreen(i, j, f); } + + if (drawNpc) + drawNpcWithExtras(npc, i, j, f); } protected void drawBackground() { @@ -442,11 +445,11 @@ public abstract class GuiNPCInterface extends GuiScreen { public int xOffsetNpc = 0, xOffsetButton = 0, xMouseRange = 50; public int yOffsetNpc = 0, yOffsetButton = 0, yMouseRange = 150; - public float zoomed = 1, rotation; + public float defaultZoom = 1, zoom = 1, rotation; public float minZoom = 1, maxZoom = 2.5f; - public boolean followMouse = true, allowRotate = true, drawNPConSub = false; - public boolean drawRenderButtons = false; + public boolean followMouse = true, allowRotate = true, drawNPConSub; + public boolean drawNpc, drawRenderButtons; public boolean isMouseOverRenderer(int x, int y) { if (!allowRotate) { @@ -464,35 +467,51 @@ public abstract class GuiNPCInterface extends GuiScreen { return mouseX >= centerX - xRange && mouseX <= centerX + xRange && mouseY >= centerY - yRange && mouseY <= centerY + yRange; } + + public void drawNpcWithExtras(EntityLivingBase entity, int mouseX, int mouseY, float partialTicks) { + drawNpc(entity, mouseX, mouseY, partialTicks); + } public void drawNpc(EntityLivingBase entity, int mouseX, int mouseY, float partialTicks) { if (hasSubGui() && !drawNPConSub) return; + + if (drawRenderButtons) { + rotateLeft.drawButton(mc, mouseX, mouseY); + rotateRight.drawButton(mc, mouseX, mouseY); + zoomOut.drawButton(mc, mouseX, mouseY); + zoomIn.drawButton(mc, mouseX, mouseY); + } + if (Mouse.isButtonDown(0) && drawRenderButtons) { if (this.rotateLeft.mousePressed(this.mc, mouseX, mouseY)) { rotation += partialTicks * 1.5F; } else if (this.rotateRight.mousePressed(this.mc, mouseX, mouseY)) { rotation -= partialTicks * 1.5F; - } else if (this.zoomOut.mousePressed(this.mc, mouseX, mouseY) && zoomed < maxZoom) { - zoomed += partialTicks * 0.05F; - } else if (this.zoomIn.mousePressed(this.mc, mouseX, mouseY) && zoomed > minZoom) { - zoomed -= partialTicks * 0.05F; + } else if (this.zoomOut.mousePressed(this.mc, mouseX, mouseY) && zoom < maxZoom) { + zoom += partialTicks * 0.05F; + } else if (this.zoomIn.mousePressed(this.mc, mouseX, mouseY) && zoom > minZoom) { + zoom -= partialTicks * 0.05F; } } + if (isMouseOverRenderer(mouseX, mouseY)) { - zoomed += Mouse.getDWheel() * 0.001f; - if (Mouse.isButtonDown(0) || Mouse.isButtonDown(1)) { + zoom += Mouse.getDWheel() * 0.001f; + if (Mouse.isButtonDown(0)) { rotation -= Mouse.getDX() * 0.75f; + } else if (Mouse.isButtonDown(1)) { + rotation = 0; + zoom = defaultZoom; } } - if (zoomed > maxZoom) - zoomed = maxZoom; - if (zoomed < minZoom) - zoomed = minZoom; + if (zoom > maxZoom) + zoom = maxZoom; + if (zoom < minZoom) + zoom = minZoom; - drawNpc(entity, mouseX, mouseY, xOffsetNpc, yOffsetNpc, zoomed, rotation, partialTicks); + drawNpc(entity, mouseX, mouseY, xOffsetNpc, yOffsetNpc, zoom, rotation, partialTicks); } public void drawNpc(EntityLivingBase entity, int mouseX, int mouseY, int x, int y, float zoomed, float rotation, float partialTicks) { @@ -505,10 +524,10 @@ public abstract class GuiNPCInterface extends GuiScreen { npc.isDrawn = true; GL11.glEnable(GL11.GL_COLOR_MATERIAL); GL11.glPushMatrix(); - GL11.glTranslatef(guiLeft + x, guiTop + y, 50F); + GL11.glTranslatef(guiLeft + x, guiTop + y, 90F); float scale = 1; if (entity.height > 2.4) - scale = 2 / npc.height; + scale = 2 / entity.height; GL11.glScalef(-30 * scale * zoomed, 30 * scale * zoomed, 30 * scale * zoomed); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); @@ -528,7 +547,7 @@ public abstract class GuiNPCInterface extends GuiScreen { GL11.glRotatef(135F, 0.0F, 1.0F, 0.0F); RenderHelper.enableStandardItemLighting(); GL11.glRotatef(-135F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-(float) Math.atan(f6 / 40F) * 20F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-(float) Math.atan(f6 / 400F) * 20F, 1.0F, 0.0F, 0.0F); entity.renderYawOffset = rotation; entity.rotationYaw = followMouse ? (float) Math.atan(f5 / 80F) * 40F + rotation : 0; entity.rotationPitch = followMouse ? -(float) Math.atan(f6 / 40F) * 20F : 0;