From 088f862574a22a034f8b2429dca0fd27e1ad82ea Mon Sep 17 00:00:00 2001 From: samoht-2401 Date: Wed, 17 Jul 2013 14:40:30 +0200 Subject: [PATCH] Better rendering --- .../transport/render/PipeWorldRenderer.java | 83 ++++++++++++++++--- 1 file changed, 73 insertions(+), 10 deletions(-) diff --git a/common/buildcraft/transport/render/PipeWorldRenderer.java b/common/buildcraft/transport/render/PipeWorldRenderer.java index a658850f..e9486e04 100644 --- a/common/buildcraft/transport/render/PipeWorldRenderer.java +++ b/common/buildcraft/transport/render/PipeWorldRenderer.java @@ -78,6 +78,45 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler { return target; } + private void renderAllFaceExeptAxe(RenderBlocks renderblocks, Block block, Icon icon, int x, int y, int z, char axe) { + float minX = (float) block.getBlockBoundsMinX(); + float minY = (float) block.getBlockBoundsMinY(); + float minZ = (float) block.getBlockBoundsMinZ(); + float maxX = (float) block.getBlockBoundsMaxX(); + float maxY = (float) block.getBlockBoundsMaxY(); + float maxZ = (float) block.getBlockBoundsMaxZ(); + if (axe != 'x') { + renderTwoWayXFace(renderblocks, block, icon, x, y, z, minY, minZ, maxY, maxZ, minX); + renderTwoWayXFace(renderblocks, block, icon, x, y, z, minY, minZ, maxY, maxZ, maxX); + } + if (axe != 'y') { + renderTwoWayYFace(renderblocks, block, icon, x, y, z, minX, minZ, maxX, maxZ, minY); + renderTwoWayYFace(renderblocks, block, icon, x, y, z, minX, minZ, maxX, maxZ, maxY); + } + if (axe != 'z') { + renderTwoWayZFace(renderblocks, block, icon, x, y, z, minX, minY, maxX, maxY, minZ); + renderTwoWayZFace(renderblocks, block, icon, x, y, z, minX, minY, maxX, maxY, maxZ); + } + } + + private void renderTwoWayXFace(RenderBlocks renderblocks, Block block, Icon icon, int xCoord, int yCoord, int zCoord, float minY, float minZ, float maxY, float maxZ, float x) { + block.setBlockBounds(x, minY, minZ, x, maxY, maxZ); + renderblocks.setRenderBoundsFromBlock(block); + renderblocks.renderStandardBlock(block, xCoord, yCoord, zCoord); + } + + private void renderTwoWayYFace(RenderBlocks renderblocks, Block block, Icon icon, int xCoord, int yCoord, int zCoord, float minX, float minZ, float maxX, float maxZ, float y) { + block.setBlockBounds(minX, y, minZ, maxX, y, maxZ); + renderblocks.setRenderBoundsFromBlock(block); + renderblocks.renderStandardBlock(block, xCoord, yCoord, zCoord); + } + + private void renderTwoWayZFace(RenderBlocks renderblocks, Block block, Icon icon, int xCoord, int yCoord, int zCoord, float minX, float minY, float maxX, float maxY, float z) { + block.setBlockBounds(minX, minY, z, maxX, maxY, z); + renderblocks.setRenderBoundsFromBlock(block); + renderblocks.renderStandardBlock(block, xCoord, yCoord, zCoord); + } + public void renderPipe(RenderBlocks renderblocks, IBlockAccess iblockaccess, Block block, IPipeRenderState renderState, int x, int y, int z) { float minSize = Utils.pipeMinPos; @@ -88,54 +127,78 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler { if (icons == null) return; - state.currentTexture = icons.getIcon(state.textureMatrix.getTextureIndex(ForgeDirection.UNKNOWN)); - block.setBlockBounds(minSize, minSize, minSize, maxSize, maxSize, maxSize); - renderblocks.setRenderBoundsFromBlock(block); - renderblocks.renderStandardBlock(block, x, y, z); + + boolean west = false; + boolean east = false; + boolean down = false; + boolean up = false; + boolean north = false; + boolean south = false; if (state.pipeConnectionMatrix.isConnected(ForgeDirection.WEST)) { state.currentTexture = icons.getIcon(state.textureMatrix.getTextureIndex(ForgeDirection.WEST)); block.setBlockBounds(0.0F, minSize, minSize, minSize, maxSize, maxSize); renderblocks.setRenderBoundsFromBlock(block); - renderblocks.renderStandardBlock(block, x, y, z); + renderAllFaceExeptAxe(renderblocks, block, state.currentTexture, x, y, z, 'x'); + west = true; } if (state.pipeConnectionMatrix.isConnected(ForgeDirection.EAST)) { state.currentTexture = icons.getIcon(state.textureMatrix.getTextureIndex(ForgeDirection.EAST)); block.setBlockBounds(maxSize, minSize, minSize, 1.0F, maxSize, maxSize); renderblocks.setRenderBoundsFromBlock(block); - renderblocks.renderStandardBlock(block, x, y, z); + renderAllFaceExeptAxe(renderblocks, block, state.currentTexture, x, y, z, 'x'); + east = true; } if (state.pipeConnectionMatrix.isConnected(ForgeDirection.DOWN)) { state.currentTexture = icons.getIcon(state.textureMatrix.getTextureIndex(ForgeDirection.DOWN)); block.setBlockBounds(minSize, 0.0F, minSize, maxSize, minSize, maxSize); renderblocks.setRenderBoundsFromBlock(block); - renderblocks.renderStandardBlock(block, x, y, z); + renderAllFaceExeptAxe(renderblocks, block, state.currentTexture, x, y, z, 'y'); + down = true; } if (state.pipeConnectionMatrix.isConnected(ForgeDirection.UP)) { state.currentTexture = icons.getIcon(state.textureMatrix.getTextureIndex(ForgeDirection.UP)); block.setBlockBounds(minSize, maxSize, minSize, maxSize, 1.0F, maxSize); renderblocks.setRenderBoundsFromBlock(block); - renderblocks.renderStandardBlock(block, x, y, z); + renderAllFaceExeptAxe(renderblocks, block, state.currentTexture, x, y, z, 'y'); + up = true; } if (state.pipeConnectionMatrix.isConnected(ForgeDirection.NORTH)) { state.currentTexture = icons.getIcon(state.textureMatrix.getTextureIndex(ForgeDirection.NORTH)); block.setBlockBounds(minSize, minSize, 0.0F, maxSize, maxSize, minSize); renderblocks.setRenderBoundsFromBlock(block); - renderblocks.renderStandardBlock(block, x, y, z); + renderAllFaceExeptAxe(renderblocks, block, state.currentTexture, x, y, z, 'z'); + north = true; } if (state.pipeConnectionMatrix.isConnected(ForgeDirection.SOUTH)) { state.currentTexture = icons.getIcon(state.textureMatrix.getTextureIndex(ForgeDirection.SOUTH)); block.setBlockBounds(minSize, minSize, maxSize, maxSize, maxSize, 1.0F); renderblocks.setRenderBoundsFromBlock(block); - renderblocks.renderStandardBlock(block, x, y, z); + renderAllFaceExeptAxe(renderblocks, block, state.currentTexture, x, y, z, 'z'); + south = true; } + block.setBlockBounds(minSize, minSize, minSize, maxSize, maxSize, maxSize); + renderblocks.setRenderBoundsFromBlock(block); + if (!west) + renderTwoWayXFace(renderblocks, block, state.currentTexture, x, y, z, minSize, minSize, maxSize, maxSize, minSize); + if (!east) + renderTwoWayXFace(renderblocks, block, state.currentTexture, x, y, z, minSize, minSize, maxSize, maxSize, maxSize); + if (!down) + renderTwoWayYFace(renderblocks, block, state.currentTexture, x, y, z, minSize, minSize, maxSize, maxSize, minSize); + if (!up) + renderTwoWayYFace(renderblocks, block, state.currentTexture, x, y, z, minSize, minSize, maxSize, maxSize, maxSize); + if (!north) + renderTwoWayZFace(renderblocks, block, state.currentTexture, x, y, z, minSize, minSize, maxSize, maxSize, minSize); + if (!south) + renderTwoWayZFace(renderblocks, block, state.currentTexture, x, y, z, minSize, minSize, maxSize, maxSize, maxSize); + block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); if (state.wireMatrix.hasWire(WireColor.Red)) {