package crazypants.enderio.teleport.telepad;
import java.util.List;
import java.util.Map;
import java.util.Random;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.obj.GroupObject;
import org.lwjgl.opengl.GL11;
import com.enderio.core.client.render.BoundingBox;
import com.enderio.core.client.render.CubeRenderer;
import com.enderio.core.client.render.IconUtil;
import com.enderio.core.client.render.TechneUtil;
import com.google.common.collect.Lists;
import crazypants.enderio.EnderIO;
import crazypants.enderio.teleport.TravelController;
import crazypants.enderio.teleport.anchor.TravelEntitySpecialRenderer;
public class TelePadSpecialRenderer extends TravelEntitySpecialRenderer {
private final Map<String, GroupObject> fullModel;
private final GroupObject blade1;
private final GroupObject blade2;
private final GroupObject blade3;
// Reverse order for top to bottom
private final List<GroupObject> blades;
private final GroupObject glass;
private static Random rand = new Random();
public TelePadSpecialRenderer(TelePadRenderer telePadRenderer) {
super();
fullModel = telePadRenderer.getFullModel();
blade1 = fullModel.get("blade1");
blade2 = fullModel.get("blade2");
blade3 = fullModel.get("blade3");
blades = Lists.newArrayList(blade3, blade2, blade1);
glass = fullModel.get("glass");
}
@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float p_147500_8_) {
TileTelePad tp = (TileTelePad) te;
if (tp.isMaster() && tp.inNetwork()) {
TravelController.instance.addCandidate(tp.getLocation());
{
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y + 0.01, z + 0.5);
Tessellator tes = Tessellator.instance;
tes.setBrightness(0xF000F0);
GL11.glDepthMask(true);
rand.setSeed(te.xCoord + te.yCoord + te.zCoord);
for (int i = 0; i < 3; i++) {
GL11.glPushMatrix();
GL11.glRotatef(tp.bladeRots[i] + rand.nextInt(360) + (tp.spinSpeed * p_147500_8_ * (i + 20)), 0, 1, 0);
render(blades.get(i), te, tes);
GL11.glPopMatrix();
}
GL11.glEnable(GL11.GL_BLEND);
render(glass, te, tes);
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();
}
}
super.renderTileEntityAt(te, x, y, z, p_147500_8_);
}
@Override
protected void renderBlock(IBlockAccess world, double sf) {
Tessellator.instance.setColorRGBA_F(1, 1, 1, 0.75f);
CubeRenderer.render(BoundingBox.UNIT_CUBE.scale(sf, sf, sf), EnderIO.blockTelePad.getHighlightIcon());
}
@Override
public IIcon getSelectedIcon() {
return IconUtil.whiteTexture;
}
@Override
public IIcon getHighlightIcon() {
return IconUtil.whiteTexture;
}
private void render(GroupObject model, TileEntity te, Tessellator tes) {
final IIcon icon = te.getBlockType().getIcon(te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord, 0);
if (icon != null && model != null) {
tes.startDrawingQuads();
TechneUtil.renderWithIcon(model, icon, null, Tessellator.instance, te.getWorldObj(), 0, 0, 0, null, false);
tes.draw();
}
}
}