101 lines
3.8 KiB
Java
101 lines
3.8 KiB
Java
package resonantinduction.atomic.fission.reactor;
|
|
|
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.client.model.AdvancedModelLoader;
|
|
import net.minecraftforge.client.model.IModelCustom;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import resonant.lib.render.RenderUtility;
|
|
import resonant.lib.render.block.ModelCube;
|
|
import resonantinduction.core.Reference;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public class RenderReactorCell extends TileEntitySpecialRenderer
|
|
{
|
|
public static final IModelCustom MODEL_TOP = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "reactorCellTop.tcn");
|
|
public static final IModelCustom MODEL_MIDDLE = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "reactorCellMiddle.tcn");
|
|
public static final IModelCustom MODEL_BOTTOM = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "reactorCellBottom.tcn");
|
|
|
|
public static final ResourceLocation TEXTURE_TOP = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "reactorCellTop.png");
|
|
public static final ResourceLocation TEXTURE_MIDDLE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "reactorCellMiddle.png");
|
|
public static final ResourceLocation TEXTURE_BOTTOM = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "reactorCellBottom.png");
|
|
public static final ResourceLocation TEXTURE_FISSILE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "fissileMaterial.png");
|
|
|
|
@Override
|
|
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
|
|
{
|
|
TileReactorCell tileEntity = (TileReactorCell) t;
|
|
|
|
// Render main body
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
|
|
|
|
int meta = 2;
|
|
|
|
if (tileEntity.worldObj != null)
|
|
{
|
|
meta = tileEntity.getBlockMetadata();
|
|
}
|
|
|
|
boolean hasBelow = tileEntity.worldObj != null && t.worldObj.getBlockTileEntity(t.xCoord, t.yCoord - 1, t.zCoord) instanceof TileReactorCell;
|
|
|
|
switch (meta)
|
|
{
|
|
case 0:
|
|
bindTexture(TEXTURE_BOTTOM);
|
|
MODEL_BOTTOM.renderAll();
|
|
break;
|
|
case 1:
|
|
bindTexture(TEXTURE_MIDDLE);
|
|
GL11.glTranslatef(0, 0.075f, 0);
|
|
GL11.glScalef(1f, 1.15f, 1f);
|
|
MODEL_MIDDLE.renderAll();
|
|
break;
|
|
case 2:
|
|
bindTexture(TEXTURE_TOP);
|
|
|
|
if (hasBelow)
|
|
{
|
|
GL11.glScalef(1f, 1.32f, 1f);
|
|
}
|
|
else
|
|
{
|
|
GL11.glTranslatef(0, 0.1f, 0);
|
|
GL11.glScalef(1f, 1.2f, 1f);
|
|
}
|
|
|
|
if (hasBelow)
|
|
{
|
|
MODEL_TOP.renderAllExcept("BottomPad", "BaseDepth", "BaseWidth", "Base");
|
|
}
|
|
else
|
|
{
|
|
MODEL_TOP.renderAll();
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
GL11.glPopMatrix();
|
|
|
|
// Render the fuel within the reactor
|
|
if (tileEntity.getStackInSlot(0) != null)
|
|
{
|
|
float height = tileEntity.getHeight() * ((float) (tileEntity.getStackInSlot(0).getMaxDamage() - tileEntity.getStackInSlot(0).getItemDamage()) / (float) tileEntity.getStackInSlot(0).getMaxDamage());
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F * height, (float) z + 0.5F);
|
|
GL11.glScalef(0.4f, 0.9f * height, 0.4f);
|
|
bindTexture(TEXTURE_FISSILE);
|
|
RenderUtility.disableLighting();
|
|
ModelCube.INSTNACE.render();
|
|
RenderUtility.enableLighting();
|
|
GL11.glPopMatrix();
|
|
}
|
|
}
|
|
} |