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 }