resonant-induction/archive/java/resonantinduction/old/client/render/RenderConveyorBelt.java
2014-01-11 17:44:07 +08:00

134 lines
No EOL
4.1 KiB
Java

package resonantinduction.old.client.render;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import resonantinduction.core.Reference;
import resonantinduction.mechanical.belt.TileConveyorBelt;
import resonantinduction.mechanical.belt.TileConveyorBelt.SlantType;
import resonantinduction.old.client.model.ModelAngledBelt;
import resonantinduction.old.client.model.ModelConveyorBelt;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderConveyorBelt extends TileEntitySpecialRenderer
{
public static final ModelConveyorBelt MODEL = new ModelConveyorBelt();
public static final ModelAngledBelt MODEL2 = new ModelAngledBelt();
@Override
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
{
TileConveyorBelt tileEntity = (TileConveyorBelt) t;
SlantType slantType = tileEntity.getSlant();
int face = tileEntity.getDirection().ordinal();
GL11.glPushMatrix();
GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
GL11.glRotatef(180f, 0f, 0f, 1f);
int frame = tileEntity.getAnimationFrame();
if (slantType != null && slantType != SlantType.NONE)
{
switch (face)
{
case 2:
GL11.glRotatef(180f, 0f, 1f, 0f);
break;
case 3:
GL11.glRotatef(0f, 0f, 1f, 0f);
break;
case 4:
GL11.glRotatef(90f, 0f, 1f, 0f);
break;
case 5:
GL11.glRotatef(-90f, 0f, 1f, 0f);
break;
}
if (slantType == SlantType.UP)
{
ResourceLocation name = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "slantedbelt/frame" + frame + ".png");
bindTexture(name);
GL11.glTranslatef(0f, 0.8f, -0.8f);
GL11.glRotatef(180f, 0f, 1f, 1f);
boolean slantAdjust = false;
TileEntity test = tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord + tileEntity.getDirection().offsetX, tileEntity.yCoord, tileEntity.zCoord + tileEntity.getDirection().offsetZ);
if (test != null)
{
if (test instanceof TileConveyorBelt)
{
if (((TileConveyorBelt) test).getSlant() == SlantType.TOP)
{
GL11.glRotatef(10f, 1f, 0f, 0f);
slantAdjust = true;
}
}
}
MODEL2.render(0.0625F, true);
}
else if (slantType == SlantType.DOWN)
{
ResourceLocation name = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "slantedbelt/frame" + frame + ".png");
bindTexture(name);
GL11.glRotatef(180f, 0f, 1f, 0f);
boolean slantAdjust = false;
TileEntity test = tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord - tileEntity.getDirection().offsetX, tileEntity.yCoord, tileEntity.zCoord - tileEntity.getDirection().offsetZ);
if (test != null)
{
if (test instanceof TileConveyorBelt)
{
if (((TileConveyorBelt) test).getSlant() == SlantType.TOP)
{
GL11.glRotatef(-10f, 1f, 0f, 0f);
GL11.glTranslatef(0f, 0.25f, 0f);
slantAdjust = true;
}
}
}
MODEL2.render(0.0625F, slantAdjust);
}
else
{
ResourceLocation name = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "belt/frame" + frame + ".png");
bindTexture(name);
GL11.glRotatef(180, 0f, 1f, 0f);
GL11.glTranslatef(0f, -0.68f, 0f);
MODEL.render(0.0625f, (float) Math.toRadians(tileEntity.wheelRotation), false, false, false, false);
}
}
else
{
switch (face)
{
case 2:
GL11.glRotatef(0f, 0f, 1f, 0f);
break;
case 3:
GL11.glRotatef(180f, 0f, 1f, 0f);
break;
case 4:
GL11.glRotatef(-90f, 0f, 1f, 0f);
break;
case 5:
GL11.glRotatef(90f, 0f, 1f, 0f);
break;
}
ResourceLocation name = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "belt/frame" + frame + ".png");
bindTexture(name);
MODEL.render(0.0625F, (float) Math.toRadians(tileEntity.wheelRotation), false, false, false, true);
}
int ent = tileEntity.worldObj.getBlockId(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord);
GL11.glPopMatrix();
}
}