001 package net.minecraft.src;
002
003 import cpw.mods.fml.client.FMLTextureFX;
004 import cpw.mods.fml.common.Side;
005 import cpw.mods.fml.common.asm.SideOnly;
006 import java.awt.image.BufferedImage;
007 import java.io.IOException;
008 import javax.imageio.ImageIO;
009 import net.minecraft.client.Minecraft;
010
011 @SideOnly(Side.CLIENT)
012 public class TextureCompassFX extends FMLTextureFX
013 {
014 /** A reference to the Minecraft object. */
015 private Minecraft mc;
016
017 /** Holds the image of the compass from items.png in rgb format. */
018 private int[] compassIconImageData = new int[256];
019 private double field_76868_i;
020 private double field_76866_j;
021
022 public TextureCompassFX(Minecraft par1Minecraft)
023 {
024 super(Item.compass.getIconFromDamage(0));
025 this.mc = par1Minecraft;
026 this.tileImage = 1;
027 setup();
028 }
029 @Override
030 public void setup()
031 {
032 super.setup();
033 compassIconImageData = new int[tileSizeSquare];
034 try
035 {
036 BufferedImage var2 = ImageIO.read(mc.texturePackList.getSelectedTexturePack().getResourceAsStream("/gui/items.png"));
037 int var3 = this.iconIndex % 16 * tileSizeBase;
038 int var4 = this.iconIndex / 16 * tileSizeBase;
039 var2.getRGB(var3, var4, tileSizeBase, tileSizeBase, this.compassIconImageData, 0, tileSizeBase);
040 }
041 catch (IOException var5)
042 {
043 var5.printStackTrace();
044 }
045 }
046
047 public void onTick()
048 {
049 for (int var1 = 0; var1 < tileSizeSquare; ++var1)
050 {
051 int var2 = this.compassIconImageData[var1] >> 24 & 255;
052 int var3 = this.compassIconImageData[var1] >> 16 & 255;
053 int var4 = this.compassIconImageData[var1] >> 8 & 255;
054 int var5 = this.compassIconImageData[var1] >> 0 & 255;
055
056 if (this.anaglyphEnabled)
057 {
058 int var6 = (var3 * 30 + var4 * 59 + var5 * 11) / 100;
059 int var7 = (var3 * 30 + var4 * 70) / 100;
060 int var8 = (var3 * 30 + var5 * 70) / 100;
061 var3 = var6;
062 var4 = var7;
063 var5 = var8;
064 }
065
066 this.imageData[var1 * 4 + 0] = (byte)var3;
067 this.imageData[var1 * 4 + 1] = (byte)var4;
068 this.imageData[var1 * 4 + 2] = (byte)var5;
069 this.imageData[var1 * 4 + 3] = (byte)var2;
070 }
071
072 double var20 = 0.0D;
073
074 if (this.mc.theWorld != null && this.mc.thePlayer != null)
075 {
076 ChunkCoordinates var21 = this.mc.theWorld.getSpawnPoint();
077 double var23 = (double)var21.posX - this.mc.thePlayer.posX;
078 double var25 = (double)var21.posZ - this.mc.thePlayer.posZ;
079 var20 = (double)(this.mc.thePlayer.rotationYaw - 90.0F) * Math.PI / 180.0D - Math.atan2(var25, var23);
080
081 if (!this.mc.theWorld.provider.isSurfaceWorld())
082 {
083 var20 = Math.random() * Math.PI * 2.0D;
084 }
085 }
086
087 double var22;
088
089 for (var22 = var20 - this.field_76868_i; var22 < -Math.PI; var22 += (Math.PI * 2D))
090 {
091 ;
092 }
093
094 while (var22 >= Math.PI)
095 {
096 var22 -= (Math.PI * 2D);
097 }
098
099 if (var22 < -1.0D)
100 {
101 var22 = -1.0D;
102 }
103
104 if (var22 > 1.0D)
105 {
106 var22 = 1.0D;
107 }
108
109 this.field_76866_j += var22 * 0.1D;
110 this.field_76866_j *= 0.8D;
111 this.field_76868_i += this.field_76866_j;
112 double var24 = Math.sin(this.field_76868_i);
113 double var26 = Math.cos(this.field_76868_i);
114 int var9;
115 int var10;
116 int var11;
117 int var12;
118 int var13;
119 int var14;
120 int var15;
121 int var17;
122 short var16;
123 int var19;
124 int var18;
125
126 for (var9 = -(tileSizeBase >> 2); var9 <= (tileSizeBase >> 2); ++var9)
127 {
128 var10 = (int)((tileSizeBase >> 1) + 0.5D + var26 * (double)var9 * 0.3D);
129 var11 = (int)((tileSizeBase >> 1) - 0.5D - var24 * (double)var9 * 0.3D * 0.5D);
130 var12 = var11 * tileSizeBase + var10;
131 var13 = 100;
132 var14 = 100;
133 var15 = 100;
134 var16 = 255;
135
136 if (this.anaglyphEnabled)
137 {
138 var17 = (var13 * 30 + var14 * 59 + var15 * 11) / 100;
139 var18 = (var13 * 30 + var14 * 70) / 100;
140 var19 = (var13 * 30 + var15 * 70) / 100;
141 var13 = var17;
142 var14 = var18;
143 var15 = var19;
144 }
145
146 this.imageData[var12 * 4 + 0] = (byte)var13;
147 this.imageData[var12 * 4 + 1] = (byte)var14;
148 this.imageData[var12 * 4 + 2] = (byte)var15;
149 this.imageData[var12 * 4 + 3] = (byte)var16;
150 }
151
152 for (var9 = -(tileSizeBase>>2); var9 <= tileSizeBase; ++var9)
153 {
154 var10 = (int)((tileSizeBase >> 1) + 0.5D + var24 * (double)var9 * 0.3D);
155 var11 = (int)((tileSizeBase >> 1) - 0.5D + var26 * (double)var9 * 0.3D * 0.5D);
156 var12 = var11 * tileSizeBase + var10;
157 var13 = var9 >= 0 ? 255 : 100;
158 var14 = var9 >= 0 ? 20 : 100;
159 var15 = var9 >= 0 ? 20 : 100;
160 var16 = 255;
161
162 if (this.anaglyphEnabled)
163 {
164 var17 = (var13 * 30 + var14 * 59 + var15 * 11) / 100;
165 var18 = (var13 * 30 + var14 * 70) / 100;
166 var19 = (var13 * 30 + var15 * 70) / 100;
167 var13 = var17;
168 var14 = var18;
169 var15 = var19;
170 }
171
172 this.imageData[var12 * 4 + 0] = (byte)var13;
173 this.imageData[var12 * 4 + 1] = (byte)var14;
174 this.imageData[var12 * 4 + 2] = (byte)var15;
175 this.imageData[var12 * 4 + 3] = (byte)var16;
176 }
177 }
178 }