thaumic-machinery/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/fragile/FilterApparatusRenderer.java

163 lines
6.3 KiB
Java

package net.anvilcraft.thaummach.render.apparatus.apparati.fragile;
import dev.tilera.auracore.api.HelperLocation;
import dev.tilera.auracore.api.machine.IConnection;
import net.anvilcraft.thaummach.blocks.BlockApparatusFragile;
import net.anvilcraft.thaummach.render.apparatus.ApparatusRenderingHelper;
import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer;
import net.anvilcraft.thaummach.tiles.TileConduit;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
public class FilterApparatusRenderer implements IApparatusRenderer {
public static final FilterApparatusRenderer INSTANCE = new FilterApparatusRenderer();
@Override
public void renderApparatus(
IBlockAccess w,
RenderBlocks rb,
int x,
int y,
int z,
Block block_,
int meta,
boolean inv
) {
BlockApparatusFragile block = (BlockApparatusFragile) block_;
float w4 = 0.25F;
float w3 = 0.1875F;
float w2 = 0.125F;
if (block.getRenderBlockPass() == 0 || inv) {
rb.setRenderBounds(w2, 0.0F, w2, 1.0F - w2, w3, 1.0F - w2);
if (inv) {
ApparatusRenderingHelper.drawFaces(
rb,
block,
block.iconFilterBottom,
block.iconFilterBottom,
block.iconFilterSide,
block.iconFilterSide,
block.iconFilterSide,
block.iconFilterSide,
false
);
} else {
rb.renderStandardBlock(block, x, y, z);
}
rb.setRenderBounds(w2, 1.0F - w3, w2, 1.0F - w2, 1.0F, 1.0F - w2);
if (inv) {
ApparatusRenderingHelper.drawFaces(
rb,
block,
block.iconFilterBottom,
block.iconFilterBottom,
block.iconFilterSide,
block.iconFilterSide,
block.iconFilterSide,
block.iconFilterSide,
false
);
} else {
rb.renderStandardBlock(block, x, y, z);
}
rb.setRenderBounds(w3, w3, w3, 1.0F - w3, 1.0F - w3, 1.0F - w3);
if (inv) {
ApparatusRenderingHelper.drawFaces(
rb,
block,
block.iconFilterBottom,
block.iconFilterBottom,
block.iconFilterSide,
block.iconFilterSide,
block.iconFilterSide,
block.iconFilterSide,
false
);
} else {
rb.renderStandardBlock(block, x, y, z);
}
}
if (!inv) {
float w6 = 0.375F;
float wq = 0.38125F;
TileConduit tc = (TileConduit) w.getTileEntity(x, y, z);
Tessellator tessellator = Tessellator.instance;
float b = 0.0F;
float total = 0.0F;
float hfill = 0.0F;
boolean visible = false;
if (block.getRenderBlockPass() != 0) {
visible = tc.pureVis + tc.taintedVis >= 0.1F;
if (visible) {
b = Math.min(
1.0F, tc.pureVis / (tc.taintedVis + tc.pureVis)
);
total = Math.min(tc.pureVis + tc.taintedVis, tc.maxVis);
hfill = (1.0F - wq * 2.0F) * (total / tc.maxVis);
tessellator.setBrightness(20 + (int) (b * 210.0F));
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
}
}
for (int dir = 2; dir < 6; ++dir) {
HelperLocation loc = new HelperLocation(tc);
switch (dir) {
case 2:
loc.facing = ForgeDirection.SOUTH;
break;
case 3:
loc.facing = ForgeDirection.NORTH;
break;
case 4:
loc.facing = ForgeDirection.EAST;
break;
case 5:
loc.facing = ForgeDirection.WEST;
}
TileEntity te = loc.getConnectableTile(w);
if (te != null && tc.getConnectable(loc.facing)) {
if (block.getRenderBlockPass() == 0) {
rb.overrideBlockTexture = block.iconConduitConnection;
switch (dir) {
case 2:
rb.setRenderBounds(
w6, w6, 1.0F - w3, w6 + w4, w6 + w4, 1.0F
);
rb.renderStandardBlock(block, x, y, z);
break;
case 3:
rb.setRenderBounds(w6, w6, 0.0F, w6 + w4, w6 + w4, w3);
rb.renderStandardBlock(block, x, y, z);
break;
case 4:
rb.setRenderBounds(
1.0F - w3, w6, w6, 1.0F, w6 + w4, w6 + w4
);
rb.renderStandardBlock(block, x, y, z);
break;
case 5:
rb.setRenderBounds(0.0F, w6, w6, w3, w6 + w4, w6 + w4);
rb.renderStandardBlock(block, x, y, z);
}
} else if (visible && (((IConnection)te).getPureVis() + ((IConnection)te).getTaintedVis() > 0.1F || !((IConnection)te).isVisConduit())) {
ConduitApparatusRenderer.renderConduitVis(
w, rb, x, y, z, block, dir, hfill
);
}
}
}
}
rb.overrideBlockTexture = null;
rb.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
}