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

321 lines
14 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.Minecraft;
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 ConduitApparatusRenderer implements IApparatusRenderer {
public static ConduitApparatusRenderer INSTANCE = new ConduitApparatusRenderer();
@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 w6 = 0.375F;
float wq = 0.38125F;
Tessellator tessellator = Tessellator.instance;
if (!inv) {
TileConduit tc = (TileConduit) w.getTileEntity(x, y, z);
float b = 0.0F;
float total = 0.0F;
float hfill = 0.0F;
boolean visible = false;
total = Math.min(tc.pureVis + tc.taintedVis, tc.maxVis);
hfill = (1.0F - wq * 2.0F) * (total / tc.maxVis);
if (block.getRenderBlockPass() == 0) {
rb.overrideBlockTexture = block.iconConduit;
rb.setRenderBounds(w6, w6, w6, w6 + w4, w6 + w4, w6 + w4);
rb.renderStandardBlock(block, x, y, z);
visible = tc.pureVis + tc.taintedVis >= 0.1F;
if (visible) {
b = Math.min(1.0F, tc.pureVis / (tc.taintedVis + tc.pureVis));
tessellator.setBrightness(20 + (int) (b * 210.0F));
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
rb.setRenderBounds(wq, wq, wq, 1.0F - wq, wq + hfill, 1.0F - wq);
rb.overrideBlockTexture = null;
rb.renderFaceXNeg(
block, (double) x, (double) y, (double) z, block.iconTcubeanim
);
rb.renderFaceXPos(
block, (double) x, (double) y, (double) z, block.iconTcubeanim
);
rb.renderFaceYNeg(
block, (double) x, (double) y, (double) z, block.iconTcubeanim
);
rb.renderFaceYPos(
block, (double) x, (double) y, (double) z, block.iconTcubeanim
);
rb.renderFaceZNeg(
block, (double) x, (double) y, (double) z, block.iconTcubeanim
);
rb.renderFaceZPos(
block, (double) x, (double) y, (double) z, block.iconTcubeanim
);
if (/*!Config.lowGfx && Config.pipedrips && */ Minecraft
.getMinecraft()
.theWorld.rand.nextInt(50)
== 1
&& w.isAirBlock(x, y - 1, z)
&& tc.pureVis + tc.taintedVis > 3.5F) {
// TODO: FXDrip
//FXDrip obj = new FXDrip(
// w,
// (double) ((float) x + w6 + w.rand.nextFloat() * w4),
// (double) ((float) y + w6 - 0.05F),
// (double) ((float) z + w6 + w.rand.nextFloat() * w4)
//);
//obj.func_40097_b(
// (0.4F + w.rand.nextFloat() * 0.2F) * (b + 0.1F),
// 0.0F,
// (0.8F + w.rand.nextFloat() * 0.2F) * (b + 0.1F)
//);
//ModLoader.getMinecraftInstance().effectRenderer.addEffect(obj);
}
}
}
rb.overrideBlockTexture = block.iconConduitExtension;
for (int dir = 0; dir < 6; ++dir) {
HelperLocation loc = new HelperLocation(tc);
loc.facing = ForgeDirection.getOrientation(dir);
TileEntity te = loc.getConnectableTile(w);
if (te != null) {
if (block.getRenderBlockPass() == 0) {
switch (loc.facing.getOpposite().ordinal()) {
case 0:
rb.setRenderBounds(
w6, w6 + w4, w6, w6 + w4, 1.0F, w6 + w4
);
rb.renderStandardBlock(block, x, y, z);
break;
case 1:
rb.setRenderBounds(w6, 0.0F, w6, w6 + w4, w6, w6 + w4);
rb.renderStandardBlock(block, x, y, z);
break;
case 2:
rb.setRenderBounds(
w6, w6, w6 + w4, 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, w6);
rb.renderStandardBlock(block, x, y, z);
break;
case 4:
rb.setRenderBounds(
w6 + w4, w6, w6, 1.0F, w6 + w4, w6 + w4
);
rb.renderStandardBlock(block, x, y, z);
break;
case 5:
rb.setRenderBounds(0.0F, w6, w6, w6, w6 + w4, w6 + w4);
rb.renderStandardBlock(block, x, y, z);
}
if (visible || !((IConnection) te).isVisConduit()) {
rb.overrideBlockTexture = null;
tessellator.setBrightness(20 + (int) (b * 210.0F));
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
renderConduitVis(
w,
rb,
x,
y,
z,
block,
loc.facing.getOpposite().ordinal(),
hfill
);
rb.overrideBlockTexture = block.iconConduitExtension;
}
}
}
}
} else {
rb.setRenderBounds(w6, 0.0F, w6, w6 + w4, 1.0F, w6 + w4);
ApparatusRenderingHelper.drawFaces(
rb, block, block.iconConduitInventory, false
);
}
rb.overrideBlockTexture = null;
rb.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
public static void renderConduitVis(
IBlockAccess w,
RenderBlocks rb,
int i,
int j,
int k,
BlockApparatusFragile block,
int dir,
float hfill
) {
float wq = 0.38125F;
switch (dir) {
case 0:
rb.setRenderBounds(
0.5F - hfill / 2.0F,
wq + hfill,
0.5F - hfill / 2.0F,
0.5F + hfill / 2.0F,
1.0F,
0.5F + hfill / 2.0F
);
rb.renderFaceZNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceZPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
break;
case 1:
rb.setRenderBounds(
0.5F - hfill / 2.0F,
0.0F,
0.5F - hfill / 2.0F,
0.5F + hfill / 2.0F,
wq,
0.5F + hfill / 2.0F
);
rb.renderFaceZNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceZPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
break;
case 2:
rb.setRenderBounds(wq, wq, 1.0F - wq, 1.0F - wq, wq + hfill, 1.0F);
rb.renderFaceZNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceZPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
break;
case 3:
rb.setRenderBounds(wq, wq, 0.0F, 1.0F - wq, wq + hfill, wq);
rb.renderFaceZNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceZPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
break;
case 4:
rb.setRenderBounds(1.0F - wq, wq, wq, 1.0F, wq + hfill, 1.0F - wq);
rb.renderFaceZNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceZPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
break;
case 5:
rb.setRenderBounds(0.0F, wq, wq, wq, wq + hfill, 1.0F - wq);
rb.renderFaceZNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceZPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceXPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYPos(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
rb.renderFaceYNeg(
block, (double) i, (double) j, (double) k, block.iconTcubeanim
);
break;
}
}
}