Support for semi-transparent facades
This commit is contained in:
parent
1945458f97
commit
c721982546
3 changed files with 148 additions and 130 deletions
|
@ -8,14 +8,25 @@
|
|||
*/
|
||||
package buildcraft.transport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
import buildcraft.BuildCraftTransport;
|
||||
import buildcraft.api.gates.GateExpansions;
|
||||
import buildcraft.api.gates.IGateExpansion;
|
||||
import buildcraft.api.tools.IToolWrench;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.*;
|
||||
import buildcraft.core.robots.AIDocked;
|
||||
import buildcraft.core.robots.EntityRobot;
|
||||
import buildcraft.core.utils.BCLog;
|
||||
import buildcraft.core.utils.MatrixTranformations;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.transport.gates.GateDefinition;
|
||||
import buildcraft.transport.gates.GateFactory;
|
||||
import buildcraft.transport.gates.ItemGate;
|
||||
import buildcraft.transport.render.PipeRendererWorld;
|
||||
import buildcraft.transport.utils.FacadeMatrix;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -37,28 +48,8 @@ import net.minecraft.util.Vec3;
|
|||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import buildcraft.BuildCraftTransport;
|
||||
import buildcraft.api.gates.GateExpansions;
|
||||
import buildcraft.api.gates.IGateExpansion;
|
||||
import buildcraft.api.tools.IToolWrench;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.BlockBuildCraft;
|
||||
import buildcraft.core.BlockIndex;
|
||||
import buildcraft.core.CoreConstants;
|
||||
import buildcraft.core.CreativeTabBuildCraft;
|
||||
import buildcraft.core.ItemRobot;
|
||||
import buildcraft.core.robots.AIDocked;
|
||||
import buildcraft.core.robots.EntityRobot;
|
||||
import buildcraft.core.utils.BCLog;
|
||||
import buildcraft.core.utils.MatrixTranformations;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.transport.gates.GateDefinition;
|
||||
import buildcraft.transport.gates.GateFactory;
|
||||
import buildcraft.transport.gates.ItemGate;
|
||||
import buildcraft.transport.utils.FacadeMatrix;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class BlockGenericPipe extends BlockBuildCraft {
|
||||
|
||||
|
@ -109,6 +100,17 @@ public class BlockGenericPipe extends BlockBuildCraft {
|
|||
return TransportProxy.pipeModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRenderInPass(int pass) {
|
||||
PipeRendererWorld.renderPass = pass;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderBlockPass() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube() {
|
||||
return false;
|
||||
|
|
|
@ -92,6 +92,8 @@ public class FacadeRenderHelper {
|
|||
Block renderBlock = state.facadeMatrix.getFacadeBlock(direction);
|
||||
|
||||
if (renderBlock != null) {
|
||||
// If the facade is meant to render in the current pass
|
||||
if (renderBlock.canRenderInPass(PipeRendererWorld.renderPass)) {
|
||||
int renderMeta = state.facadeMatrix.getFacadeMetaId(direction);
|
||||
|
||||
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
|
||||
|
@ -167,6 +169,7 @@ public class FacadeRenderHelper {
|
|||
renderblocks.uvRotateBottom = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BlockGenericPipe.facadeRenderColor = -1;
|
||||
}
|
||||
|
@ -176,6 +179,8 @@ public class FacadeRenderHelper {
|
|||
|
||||
state.currentTexture = BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal()); // Structure Pipe
|
||||
|
||||
// Always render connectors in pass 0
|
||||
if (PipeRendererWorld.renderPass == 0) {
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
|
||||
if (state.facadeMatrix.getFacadeBlock(direction) != null && !state.pipeConnectionMatrix.isConnected(direction)) {
|
||||
float[][] rotated = MatrixTranformations.deepClone(zeroStateSupport);
|
||||
|
@ -187,3 +192,4 @@ public class FacadeRenderHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,8 @@ import net.minecraftforge.common.util.ForgeDirection;
|
|||
|
||||
public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
|
||||
|
||||
public static int renderPass = -1;
|
||||
|
||||
public void renderPipe(RenderBlocks renderblocks, IBlockAccess iblockaccess, BlockGenericPipe block, TileGenericPipe tile, int x, int y, int z) {
|
||||
PipeRenderState state = tile.renderState;
|
||||
IIconProvider icons = tile.getPipeIcons();
|
||||
|
@ -31,6 +33,8 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
|
|||
return;
|
||||
}
|
||||
|
||||
// Force pipe render into pass 0
|
||||
if (renderPass == 0) {
|
||||
int connectivity = state.pipeConnectionMatrix.getMask();
|
||||
float[] dim = new float[6];
|
||||
|
||||
|
@ -67,13 +71,19 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
|
|||
|
||||
renderTwoWayBlock(renderblocks, block, x, y, z, dim, renderMask);
|
||||
}
|
||||
}
|
||||
|
||||
renderblocks.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
// Facade renderer handles rendering in both passes
|
||||
pipeFacadeRenderer(renderblocks, block, state, x, y, z);
|
||||
|
||||
// Force other opaque renders into pass 0
|
||||
if (renderPass == 0) {
|
||||
pipePlugRenderer(renderblocks, block, state, x, y, z);
|
||||
pipeRobotStationRenderer(renderblocks, block, state, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
private void resetToCenterDimensions(float[] dim) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
|
|
Loading…
Reference in a new issue