001 package net.minecraft.util; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.util.Random; 006 007 public class MathHelper 008 { 009 /** 010 * A table of sin values computed from 0 (inclusive) to 2*pi (exclusive), with steps of 2*PI / 65536. 011 */ 012 private static float[] SIN_TABLE = new float[65536]; 013 014 /** 015 * sin looked up in a table 016 */ 017 public static final float sin(float par0) 018 { 019 return SIN_TABLE[(int)(par0 * 10430.378F) & 65535]; 020 } 021 022 /** 023 * cos looked up in the sin table with the appropriate offset 024 */ 025 public static final float cos(float par0) 026 { 027 return SIN_TABLE[(int)(par0 * 10430.378F + 16384.0F) & 65535]; 028 } 029 030 public static final float sqrt_float(float par0) 031 { 032 return (float)Math.sqrt((double)par0); 033 } 034 035 public static final float sqrt_double(double par0) 036 { 037 return (float)Math.sqrt(par0); 038 } 039 040 /** 041 * Returns the greatest integer less than or equal to the float argument 042 */ 043 public static int floor_float(float par0) 044 { 045 int var1 = (int)par0; 046 return par0 < (float)var1 ? var1 - 1 : var1; 047 } 048 049 @SideOnly(Side.CLIENT) 050 051 /** 052 * returns par0 cast as an int, and no greater than Integer.MAX_VALUE-1024 053 */ 054 public static int truncateDoubleToInt(double par0) 055 { 056 return (int)(par0 + 1024.0D) - 1024; 057 } 058 059 /** 060 * Returns the greatest integer less than or equal to the double argument 061 */ 062 public static int floor_double(double par0) 063 { 064 int var2 = (int)par0; 065 return par0 < (double)var2 ? var2 - 1 : var2; 066 } 067 068 /** 069 * Long version of floor_double 070 */ 071 public static long floor_double_long(double par0) 072 { 073 long var2 = (long)par0; 074 return par0 < (double)var2 ? var2 - 1L : var2; 075 } 076 077 public static float abs(float par0) 078 { 079 return par0 >= 0.0F ? par0 : -par0; 080 } 081 082 public static int abs_int(int par0) 083 { 084 return par0 >= 0 ? par0 : -par0; 085 } 086 087 public static int ceiling_float_int(float par0) 088 { 089 int var1 = (int)par0; 090 return par0 > (float)var1 ? var1 + 1 : var1; 091 } 092 093 public static int ceiling_double_int(double par0) 094 { 095 int var2 = (int)par0; 096 return par0 > (double)var2 ? var2 + 1 : var2; 097 } 098 099 /** 100 * Returns the value of the first parameter, clamped to be within the lower and upper limits given by the second and 101 * third parameters. 102 */ 103 public static int clamp_int(int par0, int par1, int par2) 104 { 105 return par0 < par1 ? par1 : (par0 > par2 ? par2 : par0); 106 } 107 108 @SideOnly(Side.CLIENT) 109 110 /** 111 * Returns the value of the first parameter, clamped to be within the lower and upper limits given by the second and 112 * third parameters 113 */ 114 public static float clamp_float(float par0, float par1, float par2) 115 { 116 return par0 < par1 ? par1 : (par0 > par2 ? par2 : par0); 117 } 118 119 /** 120 * Maximum of the absolute value of two numbers. 121 */ 122 public static double abs_max(double par0, double par2) 123 { 124 if (par0 < 0.0D) 125 { 126 par0 = -par0; 127 } 128 129 if (par2 < 0.0D) 130 { 131 par2 = -par2; 132 } 133 134 return par0 > par2 ? par0 : par2; 135 } 136 137 @SideOnly(Side.CLIENT) 138 139 /** 140 * Buckets an integer with specifed bucket sizes. Args: i, bucketSize 141 */ 142 public static int bucketInt(int par0, int par1) 143 { 144 return par0 < 0 ? -((-par0 - 1) / par1) - 1 : par0 / par1; 145 } 146 147 @SideOnly(Side.CLIENT) 148 149 /** 150 * Tests if a string is null or of length zero 151 */ 152 public static boolean stringNullOrLengthZero(String par0Str) 153 { 154 return par0Str == null || par0Str.length() == 0; 155 } 156 157 public static int getRandomIntegerInRange(Random par0Random, int par1, int par2) 158 { 159 return par1 >= par2 ? par1 : par0Random.nextInt(par2 - par1 + 1) + par1; 160 } 161 162 public static double getRandomDoubleInRange(Random par0Random, double par1, double par3) 163 { 164 return par1 >= par3 ? par1 : par0Random.nextDouble() * (par3 - par1) + par1; 165 } 166 167 public static double average(long[] par0ArrayOfLong) 168 { 169 long var1 = 0L; 170 long[] var3 = par0ArrayOfLong; 171 int var4 = par0ArrayOfLong.length; 172 173 for (int var5 = 0; var5 < var4; ++var5) 174 { 175 long var6 = var3[var5]; 176 var1 += var6; 177 } 178 179 return (double)var1 / (double)par0ArrayOfLong.length; 180 } 181 182 /** 183 * the angle is reduced to an angle between -180 and +180 by mod, and a 360 check 184 */ 185 public static float wrapAngleTo180_float(float par0) 186 { 187 par0 %= 360.0F; 188 189 if (par0 >= 180.0F) 190 { 191 par0 -= 360.0F; 192 } 193 194 if (par0 < -180.0F) 195 { 196 par0 += 360.0F; 197 } 198 199 return par0; 200 } 201 202 /** 203 * the angle is reduced to an angle between -180 and +180 by mod, and a 360 check 204 */ 205 public static double wrapAngleTo180_double(double par0) 206 { 207 par0 %= 360.0D; 208 209 if (par0 >= 180.0D) 210 { 211 par0 -= 360.0D; 212 } 213 214 if (par0 < -180.0D) 215 { 216 par0 += 360.0D; 217 } 218 219 return par0; 220 } 221 222 /** 223 * parses the string as integer or returns the second parameter if it fails 224 */ 225 public static int parseIntWithDefault(String par0Str, int par1) 226 { 227 int var2 = par1; 228 229 try 230 { 231 var2 = Integer.parseInt(par0Str); 232 } 233 catch (Throwable var4) 234 { 235 ; 236 } 237 238 return var2; 239 } 240 241 /** 242 * parses the string as integer or returns the second parameter if it fails. this value is capped to par2 243 */ 244 public static int parseIntWithDefaultAndMax(String par0Str, int par1, int par2) 245 { 246 int var3 = par1; 247 248 try 249 { 250 var3 = Integer.parseInt(par0Str); 251 } 252 catch (Throwable var5) 253 { 254 ; 255 } 256 257 if (var3 < par2) 258 { 259 var3 = par2; 260 } 261 262 return var3; 263 } 264 265 /** 266 * parses the string as double or returns the second parameter if it fails. 267 */ 268 public static double parseDoubleWithDefault(String par0Str, double par1) 269 { 270 double var3 = par1; 271 272 try 273 { 274 var3 = Double.parseDouble(par0Str); 275 } 276 catch (Throwable var6) 277 { 278 ; 279 } 280 281 return var3; 282 } 283 284 public static double func_82713_a(String par0Str, double par1, double par3) 285 { 286 double var5 = par1; 287 288 try 289 { 290 var5 = Double.parseDouble(par0Str); 291 } 292 catch (Throwable var8) 293 { 294 ; 295 } 296 297 if (var5 < par3) 298 { 299 var5 = par3; 300 } 301 302 return var5; 303 } 304 305 static 306 { 307 for (int var0 = 0; var0 < 65536; ++var0) 308 { 309 SIN_TABLE[var0] = (float)Math.sin((double)var0 * Math.PI * 2.0D / 65536.0D); 310 } 311 } 312 }