From e10e30f82b8f06f1d4efc7e749cbc890e1f94f6c Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sun, 16 May 2021 18:40:18 +0100 Subject: [PATCH] Use a separate region for the bottom pocket computer border This is definitely not a good solution, but it's probably the best we can do right now given resizable computers are a thing. Fixes #775, closes #776 --- .../client/render/ComputerBorderRenderer.java | 37 +++++++----------- .../client/render/ItemPocketRenderer.java | 7 +--- .../textures/gui/corners_advanced.png | Bin 299 -> 352 bytes .../textures/gui/corners_colour.png | Bin 289 -> 352 bytes .../textures/gui/corners_normal.png | Bin 292 -> 347 bytes 5 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/main/java/dan200/computercraft/client/render/ComputerBorderRenderer.java b/src/main/java/dan200/computercraft/client/render/ComputerBorderRenderer.java index a7357f0d2..bd52458f3 100644 --- a/src/main/java/dan200/computercraft/client/render/ComputerBorderRenderer.java +++ b/src/main/java/dan200/computercraft/client/render/ComputerBorderRenderer.java @@ -47,7 +47,10 @@ public class ComputerBorderRenderer private static final int CORNER_LEFT_X = BORDER; private static final int CORNER_RIGHT_X = CORNER_LEFT_X + BORDER; private static final int BORDER_RIGHT_X = 36; - private static final int GAP = 4; + private static final int LIGHT_BORDER_Y = 56; + private static final int LIGHT_CORNER_Y = 80; + + public static final int LIGHT_HEIGHT = 8; private static final float TEX_SCALE = 1 / 256.0f; @@ -101,15 +104,15 @@ public class ComputerBorderRenderer public static void render( Matrix4f transform, IVertexBuilder buffer, int x, int y, int z, int width, int height, float r, float g, float b ) { - render( transform, buffer, x, y, z, width, height, 0, r, g, b ); + render( transform, buffer, x, y, z, width, height, false, r, g, b ); } - public static void render( Matrix4f transform, IVertexBuilder buffer, int x, int y, int z, int width, int height, int borderHeight, float r, float g, float b ) + public static void render( Matrix4f transform, IVertexBuilder buffer, int x, int y, int z, int width, int height, boolean withLight, float r, float g, float b ) { - new ComputerBorderRenderer( transform, buffer, z, r, g, b ).doRender( x, y, width, height, borderHeight ); + new ComputerBorderRenderer( transform, buffer, z, r, g, b ).doRender( x, y, width, height, withLight ); } - public void doRender( int x, int y, int width, int height, int bottomHeight ) + public void doRender( int x, int y, int width, int height, boolean withLight ) { int endX = x + width; int endY = y + height; @@ -125,28 +128,18 @@ public class ComputerBorderRenderer // Bottom bar. We allow for drawing a stretched version, which allows for additional elements (such as the // pocket computer's lights). - if( bottomHeight <= 0 ) + if( withLight ) + { + renderTexture( x, endY, 0, LIGHT_BORDER_Y, endX - x, BORDER + LIGHT_HEIGHT, BORDER, BORDER + LIGHT_HEIGHT ); + renderTexture( x - BORDER, endY, CORNER_LEFT_X, LIGHT_CORNER_Y, BORDER, BORDER + LIGHT_HEIGHT ); + renderTexture( endX, endY, CORNER_RIGHT_X, LIGHT_CORNER_Y, BORDER, BORDER + LIGHT_HEIGHT ); + } + else { renderLine( x, endY, 0, BORDER, endX - x, BORDER ); renderCorner( x - BORDER, endY, CORNER_LEFT_X, CORNER_BOTTOM_Y ); renderCorner( endX, endY, CORNER_RIGHT_X, CORNER_BOTTOM_Y ); } - else - { - // Bottom left, middle, right. We do this in three portions: the top inner corners, an extended region for - // lights, and then the bottom outer corners. - renderTexture( x - BORDER, endY, CORNER_LEFT_X, CORNER_BOTTOM_Y, BORDER, BORDER / 2 ); - renderTexture( x, endY, 0, BORDER, width, BORDER / 2, BORDER, BORDER / 2 ); - renderTexture( endX, endY, CORNER_RIGHT_X, CORNER_BOTTOM_Y, BORDER, BORDER / 2 ); - - renderTexture( x - BORDER, endY + BORDER / 2, CORNER_LEFT_X, CORNER_BOTTOM_Y + GAP, BORDER, bottomHeight, BORDER, GAP ); - renderTexture( x, endY + BORDER / 2, 0, BORDER + GAP, width, bottomHeight, BORDER, GAP ); - renderTexture( endX, endY + BORDER / 2, CORNER_RIGHT_X, CORNER_BOTTOM_Y + GAP, BORDER, bottomHeight, BORDER, GAP ); - - renderTexture( x - BORDER, endY + bottomHeight + BORDER / 2, CORNER_LEFT_X, CORNER_BOTTOM_Y + BORDER / 2, BORDER, BORDER / 2 ); - renderTexture( x, endY + bottomHeight + BORDER / 2, 0, BORDER + BORDER / 2, width, BORDER / 2 ); - renderTexture( endX, endY + bottomHeight + BORDER / 2, CORNER_RIGHT_X, CORNER_BOTTOM_Y + BORDER / 2, BORDER, BORDER / 2 ); - } } private void renderCorner( int x, int y, int u, int v ) diff --git a/src/main/java/dan200/computercraft/client/render/ItemPocketRenderer.java b/src/main/java/dan200/computercraft/client/render/ItemPocketRenderer.java index 499d82202..82cdbe532 100644 --- a/src/main/java/dan200/computercraft/client/render/ItemPocketRenderer.java +++ b/src/main/java/dan200/computercraft/client/render/ItemPocketRenderer.java @@ -26,8 +26,7 @@ import org.lwjgl.opengl.GL11; import static dan200.computercraft.client.gui.FixedWidthFontRenderer.FONT_HEIGHT; import static dan200.computercraft.client.gui.FixedWidthFontRenderer.FONT_WIDTH; -import static dan200.computercraft.client.render.ComputerBorderRenderer.BORDER; -import static dan200.computercraft.client.render.ComputerBorderRenderer.MARGIN; +import static dan200.computercraft.client.render.ComputerBorderRenderer.*; /** * Emulates map rendering for pocket computers. @@ -35,8 +34,6 @@ import static dan200.computercraft.client.render.ComputerBorderRenderer.MARGIN; @Mod.EventBusSubscriber( modid = ComputerCraft.MOD_ID, value = Dist.CLIENT ) public final class ItemPocketRenderer extends ItemMapLikeRenderer { - private static final int LIGHT_HEIGHT = 8; - private static final ItemPocketRenderer INSTANCE = new ItemPocketRenderer(); private ItemPocketRenderer() @@ -127,7 +124,7 @@ public final class ItemPocketRenderer extends ItemMapLikeRenderer BufferBuilder buffer = tessellator.getBuilder(); buffer.begin( GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR_TEX ); - ComputerBorderRenderer.render( transform, buffer, 0, 0, 0, width, height, LIGHT_HEIGHT, r, g, b ); + ComputerBorderRenderer.render( transform, buffer, 0, 0, 0, width, height, true, r, g, b ); tessellator.end(); } diff --git a/src/main/resources/assets/computercraft/textures/gui/corners_advanced.png b/src/main/resources/assets/computercraft/textures/gui/corners_advanced.png index de85f971931a50dbdc4d032c4bc778fde68f4df6..d42b9e4fdedc2d3eacf513cf667d9888466915b9 100644 GIT binary patch delta 281 zcmV+!0p|Xz0^kCWBnTu>OjJbx005CGA%EtckevVk00DGTPE!Ct=GbNc008PqL_t(| z+U?n~5rQxjfZ-IfoRy6hQj^9#9KpLcfQ4+}xtxWFG_-l%@qG*M7bK9Ea$Hebd9Bz^ zK&%iTKtQvAx}sS?`c~{)U=;`uU@P`5fc_Z~!|z=@ls+PEL*szm_;t?-*v|puA!;Sy zJbt&}+mI9R5FkK6MAVubFg<$10hgCmAV9!B1k{{>?mC~zastX}4#@c@EZy%=*f;>p zijC<62oNAZfB<(!?u_7LIVa2unC66e0n>;^fB*pk1PIuAK+OqQ-WQ|Vmvj)L}lfrUlTsvWBS)xyX|zTduHmr!Z{5$6df8G z(iltKH#d9znz*y^W2n z`3sinW`hJ_2F9DanniLOr&;SfmB`lj2EH;4UiVWs%(D`(B+ zo}Xfzy@#*jC`-=tsUFfo7ku|?{wVC@lwjo$FohI$T(B&J!> z_a+}@S>nvs5h=VZ?WRZ=A4B@lzLzWw35?d=E0p zGl8Tv@Bj+JcRW6F&-zE1Z&kF#WH5k)ziNP|$d~`njxgN@xNA D!gPG} delta 241 zcmaFBw2*0n3adnbPl)S89f|sY=1@Nd1_s8GAirP+hi5m^fSm1~E{-7;x87dg$a}~@ zz#(w5YKC&llzD`V#PsR%lCO$S_j2x2+V;43=R1w9KGuE00@f@X z0s*=SHv)APYPHM6B3PMNZgkCMz0fCkasB;AOScGqe5K7kXWIXUa=!zWoD%w)^^9*# z@(-S`_B){A(9qB!(e|WapKaBFG96#C{^wbwrmTjKXP!!En^pDefa~zj8dqd<# z!?_HMOhBt1oINpHuqO9;OC{re%fz??`7X*14In8Q+XbgNZ|oCa!jf~JyNF3joC)YH cbg-$0pmdKI;Vst051q?FaQ7m delta 224 zcmV<603ZL`0;B?vBn2K&OjJdYEFOQUWn=>Y0004WQchCST5I|8&VX1T!N#Q(G8FSwoL_8w7y8ZH^DD_XS+O3lvdUg*9nLd0t5(X z7BHP?7LdM*-36vVfB>u5T>y27i19d!eW?-g85;-O_IJQHC*ZyZEPYBqUAHb3Jil@R z76AeTM8q^D2aNUV0q@lm2oUfO0YgqeHxHYffb!e}a^8fcJ3fVt1CucU6O%vz1Q`GT axV#_oT^_b~mC~C40000Qe0h