001package net.minecraft.client.renderer.texture; 002 003import cpw.mods.fml.relauncher.Side; 004import cpw.mods.fml.relauncher.SideOnly; 005import net.minecraft.client.Minecraft; 006import net.minecraft.util.ChunkCoordinates; 007import net.minecraft.world.World; 008 009@SideOnly(Side.CLIENT) 010public class TextureCompass extends TextureStitched 011{ 012 public static TextureCompass field_94243_h; 013 public double field_94244_i; 014 public double field_94242_j; 015 016 public TextureCompass() 017 { 018 super("compass"); 019 field_94243_h = this; 020 } 021 022 public void func_94219_l() 023 { 024 Minecraft minecraft = Minecraft.getMinecraft(); 025 026 if (minecraft.theWorld != null && minecraft.thePlayer != null) 027 { 028 this.func_94241_a(minecraft.theWorld, minecraft.thePlayer.posX, minecraft.thePlayer.posZ, (double)minecraft.thePlayer.rotationYaw, false, false); 029 } 030 else 031 { 032 this.func_94241_a((World)null, 0.0D, 0.0D, 0.0D, true, false); 033 } 034 } 035 036 public void func_94241_a(World par1World, double par2, double par4, double par6, boolean par8, boolean par9) 037 { 038 double d3 = 0.0D; 039 040 if (par1World != null && !par8) 041 { 042 ChunkCoordinates chunkcoordinates = par1World.getSpawnPoint(); 043 double d4 = (double)chunkcoordinates.posX - par2; 044 double d5 = (double)chunkcoordinates.posZ - par4; 045 par6 %= 360.0D; 046 d3 = -((par6 - 90.0D) * Math.PI / 180.0D - Math.atan2(d5, d4)); 047 048 if (!par1World.provider.isSurfaceWorld()) 049 { 050 d3 = Math.random() * Math.PI * 2.0D; 051 } 052 } 053 054 if (par9) 055 { 056 this.field_94244_i = d3; 057 } 058 else 059 { 060 double d6; 061 062 for (d6 = d3 - this.field_94244_i; d6 < -Math.PI; d6 += (Math.PI * 2D)) 063 { 064 ; 065 } 066 067 while (d6 >= Math.PI) 068 { 069 d6 -= (Math.PI * 2D); 070 } 071 072 if (d6 < -1.0D) 073 { 074 d6 = -1.0D; 075 } 076 077 if (d6 > 1.0D) 078 { 079 d6 = 1.0D; 080 } 081 082 this.field_94242_j += d6 * 0.1D; 083 this.field_94242_j *= 0.8D; 084 this.field_94244_i += this.field_94242_j; 085 } 086 087 int i; 088 089 for (i = (int)((this.field_94244_i / (Math.PI * 2D) + 1.0D) * (double)this.field_94226_b.size()) % this.field_94226_b.size(); i < 0; i = (i + this.field_94226_b.size()) % this.field_94226_b.size()) 090 { 091 ; 092 } 093 094 if (i != this.field_94222_f) 095 { 096 this.field_94222_f = i; 097 this.field_94228_a.func_94281_a(this.field_94224_d, this.field_94225_e, (Texture)this.field_94226_b.get(this.field_94222_f), this.field_94227_c); 098 } 099 } 100}