package openblocks.client.renderer.tileentity.guide;
import openblocks.common.tileentity.TileEntityGuide;
import openblocks.shapes.CoordShape;
import openmods.utils.TextureUtils;
import org.lwjgl.opengl.GL11;
public class GuideAdvancedRenderer implements IGuideRenderer {
private final MarkerRenderer mr;
public GuideAdvancedRenderer(Runnable marker) {
this.mr = new MarkerRenderer(marker);
}
@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);
CoordShape toDelete = guide.getAndDeleteShape();
if (toDelete != null && mr != null) mr.deleteShape(toDelete);
}
private void renderShape(CoordShape shape, int color, float scale) {
if (shape == null) return;
TextureUtils.bindDefaultTerrainTexture();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
GL11.glDisable(GL11.GL_LIGHTING);
mr.drawInstanced(shape, color, scale);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_BLEND);
}
@Override
public void onTextureChange() {
mr.reset();
}
}