package openblocks.client.renderer.tileentity.guide; import net.minecraft.client.renderer.Tessellator; import openblocks.common.tileentity.TileEntityGuide; import openblocks.shapes.CoordShape; import openmods.renderer.DisplayListWrapper; import openmods.utils.Coord; import openmods.utils.TextureUtils; import org.lwjgl.opengl.GL11; public class GuideLegacyRenderer implements IGuideRenderer { private DisplayListWrapper wrapper; public GuideLegacyRenderer(final Runnable model) { wrapper = new DisplayListWrapper() { @Override public void compile() { model.run(); Tessellator.instance.draw(); } }; } @Override public void onTextureChange() { wrapper.reset(); } @Override public void renderShape(TileEntityGuide guide) { float scaleDelta = guide.getTimeSinceChange(); renderShape(guide.getShape(), guide.getColor(), scaleDelta); if (scaleDelta < 1.0) { renderShape(guide.getPreviousShape(), guide.getColor(), 1.0f - scaleDelta); } } private void renderShape(CoordShape shape, int color, float scale) { if (shape == null) return; TextureUtils.bindDefaultTerrainTexture(); GL11.glColor3ub((byte)(color >> 16), (byte)(color >> 8), (byte)(color >> 0)); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); GL11.glDisable(GL11.GL_LIGHTING); for (Coord coord : shape.getCoords()) renderMarkerAt(coord.x, coord.y, coord.z, scale); GL11.glEnable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_BLEND); } private void renderMarkerAt(double x, double y, double z, float scale) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5F, y, z + 0.5F); GL11.glScalef(scale, scale, scale); wrapper.render(); GL11.glPopMatrix(); } }