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 static void render( Matrix4f transform, IVertexBuilder buffer, int x, int 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 void doRender( int x, int y, int width, int height, int bottomHeight ) // 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 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 @@ @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 @@ private static void renderFrame( Matrix4f transform, ComputerFamily family, int 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