package li.cil.oc.client.renderer.tileentity

import li.cil.oc.Settings
import li.cil.oc.common.tileentity
import li.cil.oc.util.RenderState
import net.minecraft.client.renderer.Tessellator
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer
import net.minecraft.tileentity.TileEntity
import net.minecraft.util.ResourceLocation
import org.lwjgl.opengl.GL11

object PowerDistributorRenderer extends TileEntitySpecialRenderer {
  private val sideOn = new ResourceLocation(Settings.resourceDomain, "textures/blocks/power_distributor_on.png")

  override def renderTileEntityAt(tileEntity: TileEntity, x: Double, y: Double, z: Double, f: Float) = {
    val distributor = tileEntity.asInstanceOf[tileentity.PowerDistributor]
    if (distributor.globalBuffer > 0) {
      GL11.glPushAttrib(0xFFFFFF)

      RenderState.disableLighting()
      RenderState.makeItBlend()
      RenderState.setBlendAlpha((distributor.globalBuffer / distributor.globalBufferSize).toFloat)

      GL11.glPushMatrix()

      GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5)
      GL11.glScalef(1.002f, -1.002f, 1.002f)
      GL11.glTranslatef(-0.5f, -0.5f, -0.5f)

      bindTexture(sideOn)

      val t = Tessellator.instance
      t.startDrawingQuads()

      t.addVertexWithUV(1, 1, 0, 0, 1)
      t.addVertexWithUV(0, 1, 0, 1, 1)
      t.addVertexWithUV(0, 0, 0, 1, 0)
      t.addVertexWithUV(1, 0, 0, 0, 0)

      t.addVertexWithUV(0, 1, 1, 0, 1)
      t.addVertexWithUV(1, 1, 1, 1, 1)
      t.addVertexWithUV(1, 0, 1, 1, 0)
      t.addVertexWithUV(0, 0, 1, 0, 0)

      t.addVertexWithUV(1, 1, 1, 0, 1)
      t.addVertexWithUV(1, 1, 0, 1, 1)
      t.addVertexWithUV(1, 0, 0, 1, 0)
      t.addVertexWithUV(1, 0, 1, 0, 0)

      t.addVertexWithUV(0, 1, 0, 0, 1)
      t.addVertexWithUV(0, 1, 1, 1, 1)
      t.addVertexWithUV(0, 0, 1, 1, 0)
      t.addVertexWithUV(0, 0, 0, 0, 0)

      t.draw()

      GL11.glPopMatrix()
      GL11.glPopAttrib()
    }
  }

}
