001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005 import java.awt.image.BufferedImage;
006 import java.util.Iterator;
007 import org.lwjgl.opengl.GL11;
008
009 @SideOnly(Side.CLIENT)
010 public class MapItemRenderer
011 {
012 private int[] intArray = new int[16384];
013 private int bufferedImage;
014 private GameSettings gameSettings;
015 private FontRenderer fontRenderer;
016
017 public MapItemRenderer(FontRenderer par1FontRenderer, GameSettings par2GameSettings, RenderEngine par3RenderEngine)
018 {
019 this.gameSettings = par2GameSettings;
020 this.fontRenderer = par1FontRenderer;
021 this.bufferedImage = par3RenderEngine.allocateAndSetupTexture(new BufferedImage(128, 128, 2));
022
023 for (int var4 = 0; var4 < 16384; ++var4)
024 {
025 this.intArray[var4] = 0;
026 }
027 }
028
029 public void renderMap(EntityPlayer par1EntityPlayer, RenderEngine par2RenderEngine, MapData par3MapData)
030 {
031 for (int var4 = 0; var4 < 16384; ++var4)
032 {
033 byte var5 = par3MapData.colors[var4];
034
035 if (var5 / 4 == 0)
036 {
037 this.intArray[var4] = (var4 + var4 / 128 & 1) * 8 + 16 << 24;
038 }
039 else
040 {
041 int var6 = MapColor.mapColorArray[var5 / 4].colorValue;
042 int var7 = var5 & 3;
043 short var8 = 220;
044
045 if (var7 == 2)
046 {
047 var8 = 255;
048 }
049
050 if (var7 == 0)
051 {
052 var8 = 180;
053 }
054
055 int var9 = (var6 >> 16 & 255) * var8 / 255;
056 int var10 = (var6 >> 8 & 255) * var8 / 255;
057 int var11 = (var6 & 255) * var8 / 255;
058
059 if (this.gameSettings.anaglyph)
060 {
061 int var12 = (var9 * 30 + var10 * 59 + var11 * 11) / 100;
062 int var13 = (var9 * 30 + var10 * 70) / 100;
063 int var14 = (var9 * 30 + var11 * 70) / 100;
064 var9 = var12;
065 var10 = var13;
066 var11 = var14;
067 }
068
069 this.intArray[var4] = -16777216 | var9 << 16 | var10 << 8 | var11;
070 }
071 }
072
073 par2RenderEngine.createTextureFromBytes(this.intArray, 128, 128, this.bufferedImage);
074 byte var15 = 0;
075 byte var16 = 0;
076 Tessellator var17 = Tessellator.instance;
077 float var18 = 0.0F;
078 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.bufferedImage);
079 GL11.glEnable(GL11.GL_BLEND);
080 GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
081 GL11.glDisable(GL11.GL_ALPHA_TEST);
082 var17.startDrawingQuads();
083 var17.addVertexWithUV((double)((float)(var15 + 0) + var18), (double)((float)(var16 + 128) - var18), -0.009999999776482582D, 0.0D, 1.0D);
084 var17.addVertexWithUV((double)((float)(var15 + 128) - var18), (double)((float)(var16 + 128) - var18), -0.009999999776482582D, 1.0D, 1.0D);
085 var17.addVertexWithUV((double)((float)(var15 + 128) - var18), (double)((float)(var16 + 0) + var18), -0.009999999776482582D, 1.0D, 0.0D);
086 var17.addVertexWithUV((double)((float)(var15 + 0) + var18), (double)((float)(var16 + 0) + var18), -0.009999999776482582D, 0.0D, 0.0D);
087 var17.draw();
088 GL11.glEnable(GL11.GL_ALPHA_TEST);
089 GL11.glDisable(GL11.GL_BLEND);
090 par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/misc/mapicons.png"));
091 Iterator var19 = par3MapData.playersVisibleOnMap.iterator();
092
093 while (var19.hasNext())
094 {
095 MapCoord var20 = (MapCoord)var19.next();
096 GL11.glPushMatrix();
097 GL11.glTranslatef((float)var15 + (float)var20.centerX / 2.0F + 64.0F, (float)var16 + (float)var20.centerZ / 2.0F + 64.0F, -0.02F);
098 GL11.glRotatef((float)(var20.iconRotation * 360) / 16.0F, 0.0F, 0.0F, 1.0F);
099 GL11.glScalef(4.0F, 4.0F, 3.0F);
100 GL11.glTranslatef(-0.125F, 0.125F, 0.0F);
101 float var21 = (float)(var20.iconSize % 4 + 0) / 4.0F;
102 float var23 = (float)(var20.iconSize / 4 + 0) / 4.0F;
103 float var22 = (float)(var20.iconSize % 4 + 1) / 4.0F;
104 float var24 = (float)(var20.iconSize / 4 + 1) / 4.0F;
105 var17.startDrawingQuads();
106 var17.addVertexWithUV(-1.0D, 1.0D, 0.0D, (double)var21, (double)var23);
107 var17.addVertexWithUV(1.0D, 1.0D, 0.0D, (double)var22, (double)var23);
108 var17.addVertexWithUV(1.0D, -1.0D, 0.0D, (double)var22, (double)var24);
109 var17.addVertexWithUV(-1.0D, -1.0D, 0.0D, (double)var21, (double)var24);
110 var17.draw();
111 GL11.glPopMatrix();
112 }
113
114 GL11.glPushMatrix();
115 GL11.glTranslatef(0.0F, 0.0F, -0.04F);
116 GL11.glScalef(1.0F, 1.0F, 1.0F);
117 this.fontRenderer.drawString(par3MapData.mapName, var15, var16, -16777216);
118 GL11.glPopMatrix();
119 }
120 }