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.nio.FloatBuffer; 007 import java.util.Iterator; 008 import java.util.List; 009 import java.util.Random; 010 import net.minecraft.client.Minecraft; 011 import net.minecraftforge.client.ForgeHooksClient; 012 import net.minecraftforge.client.event.DrawBlockHighlightEvent; 013 import net.minecraftforge.client.event.RenderWorldLastEvent; 014 import net.minecraftforge.common.MinecraftForge; 015 016 import org.lwjgl.input.Mouse; 017 import org.lwjgl.opengl.Display; 018 import org.lwjgl.opengl.GL11; 019 import org.lwjgl.opengl.GLContext; 020 import org.lwjgl.util.glu.GLU; 021 022 @SideOnly(Side.CLIENT) 023 public class EntityRenderer 024 { 025 public static boolean anaglyphEnable = false; 026 027 /** Anaglyph field (0=R, 1=GB) */ 028 public static int anaglyphField; 029 030 /** A reference to the Minecraft object. */ 031 private Minecraft mc; 032 private float farPlaneDistance = 0.0F; 033 public ItemRenderer itemRenderer; 034 035 /** Entity renderer update count */ 036 private int rendererUpdateCount; 037 038 /** Pointed entity */ 039 private Entity pointedEntity = null; 040 private MouseFilter mouseFilterXAxis = new MouseFilter(); 041 private MouseFilter mouseFilterYAxis = new MouseFilter(); 042 043 /** Mouse filter dummy 1 */ 044 private MouseFilter mouseFilterDummy1 = new MouseFilter(); 045 046 /** Mouse filter dummy 2 */ 047 private MouseFilter mouseFilterDummy2 = new MouseFilter(); 048 049 /** Mouse filter dummy 3 */ 050 private MouseFilter mouseFilterDummy3 = new MouseFilter(); 051 052 /** Mouse filter dummy 4 */ 053 private MouseFilter mouseFilterDummy4 = new MouseFilter(); 054 private float thirdPersonDistance = 4.0F; 055 056 /** Third person distance temp */ 057 private float thirdPersonDistanceTemp = 4.0F; 058 private float debugCamYaw = 0.0F; 059 private float prevDebugCamYaw = 0.0F; 060 private float debugCamPitch = 0.0F; 061 private float prevDebugCamPitch = 0.0F; 062 063 /** Smooth cam yaw */ 064 private float smoothCamYaw; 065 066 /** Smooth cam pitch */ 067 private float smoothCamPitch; 068 069 /** Smooth cam filter X */ 070 private float smoothCamFilterX; 071 072 /** Smooth cam filter Y */ 073 private float smoothCamFilterY; 074 075 /** Smooth cam partial ticks */ 076 private float smoothCamPartialTicks; 077 private float debugCamFOV = 0.0F; 078 private float prevDebugCamFOV = 0.0F; 079 private float camRoll = 0.0F; 080 private float prevCamRoll = 0.0F; 081 082 /** 083 * The texture id of the blocklight/skylight texture used for lighting effects 084 */ 085 public int lightmapTexture; 086 087 /** 088 * Colors computed in updateLightmap() and loaded into the lightmap emptyTexture 089 */ 090 private int[] lightmapColors; 091 092 /** FOV modifier hand */ 093 private float fovModifierHand; 094 095 /** FOV modifier hand prev */ 096 private float fovModifierHandPrev; 097 098 /** FOV multiplier temp */ 099 private float fovMultiplierTemp; 100 101 /** Cloud fog mode */ 102 private boolean cloudFog = false; 103 private double cameraZoom = 1.0D; 104 private double cameraYaw = 0.0D; 105 private double cameraPitch = 0.0D; 106 107 /** Previous frame time in milliseconds */ 108 private long prevFrameTime = Minecraft.getSystemTime(); 109 110 /** End time of last render (ns) */ 111 private long renderEndNanoTime = 0L; 112 113 /** 114 * Is set, updateCameraAndRender() calls updateLightmap(); set by updateTorchFlicker() 115 */ 116 private boolean lightmapUpdateNeeded = false; 117 118 /** Torch flicker X */ 119 float torchFlickerX = 0.0F; 120 121 /** Torch flicker DX */ 122 float torchFlickerDX = 0.0F; 123 124 /** Torch flicker Y */ 125 float torchFlickerY = 0.0F; 126 127 /** Torch flicker DY */ 128 float torchFlickerDY = 0.0F; 129 private Random random = new Random(); 130 131 /** Rain sound counter */ 132 private int rainSoundCounter = 0; 133 134 /** Rain X coords */ 135 float[] rainXCoords; 136 137 /** Rain Y coords */ 138 float[] rainYCoords; 139 volatile int field_78523_k = 0; 140 volatile int field_78520_l = 0; 141 142 /** Fog color buffer */ 143 FloatBuffer fogColorBuffer = GLAllocation.createDirectFloatBuffer(16); 144 145 /** red component of the fog color */ 146 float fogColorRed; 147 148 /** green component of the fog color */ 149 float fogColorGreen; 150 151 /** blue component of the fog color */ 152 float fogColorBlue; 153 154 /** Fog color 2 */ 155 private float fogColor2; 156 157 /** Fog color 1 */ 158 private float fogColor1; 159 160 /** 161 * Debug view direction (0=OFF, 1=Front, 2=Right, 3=Back, 4=Left, 5=TiltLeft, 6=TiltRight) 162 */ 163 public int debugViewDirection; 164 165 public EntityRenderer(Minecraft par1Minecraft) 166 { 167 this.mc = par1Minecraft; 168 this.itemRenderer = new ItemRenderer(par1Minecraft); 169 this.lightmapTexture = par1Minecraft.renderEngine.allocateAndSetupTexture(new BufferedImage(16, 16, 1)); 170 this.lightmapColors = new int[256]; 171 } 172 173 /** 174 * Updates the entity renderer 175 */ 176 public void updateRenderer() 177 { 178 this.updateFovModifierHand(); 179 this.updateTorchFlicker(); 180 this.fogColor2 = this.fogColor1; 181 this.thirdPersonDistanceTemp = this.thirdPersonDistance; 182 this.prevDebugCamYaw = this.debugCamYaw; 183 this.prevDebugCamPitch = this.debugCamPitch; 184 this.prevDebugCamFOV = this.debugCamFOV; 185 this.prevCamRoll = this.camRoll; 186 float var1; 187 float var2; 188 189 if (this.mc.gameSettings.smoothCamera) 190 { 191 var1 = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F; 192 var2 = var1 * var1 * var1 * 8.0F; 193 this.smoothCamFilterX = this.mouseFilterXAxis.func_76333_a(this.smoothCamYaw, 0.05F * var2); 194 this.smoothCamFilterY = this.mouseFilterYAxis.func_76333_a(this.smoothCamPitch, 0.05F * var2); 195 this.smoothCamPartialTicks = 0.0F; 196 this.smoothCamYaw = 0.0F; 197 this.smoothCamPitch = 0.0F; 198 } 199 200 if (this.mc.renderViewEntity == null) 201 { 202 this.mc.renderViewEntity = this.mc.thePlayer; 203 } 204 205 var1 = this.mc.theWorld.getLightBrightness(MathHelper.floor_double(this.mc.renderViewEntity.posX), MathHelper.floor_double(this.mc.renderViewEntity.posY), MathHelper.floor_double(this.mc.renderViewEntity.posZ)); 206 var2 = (float)(3 - this.mc.gameSettings.renderDistance) / 3.0F; 207 float var3 = var1 * (1.0F - var2) + var2; 208 this.fogColor1 += (var3 - this.fogColor1) * 0.1F; 209 ++this.rendererUpdateCount; 210 this.itemRenderer.updateEquippedItem(); 211 this.addRainParticles(); 212 } 213 214 /** 215 * Finds what block or object the mouse is over at the specified partial tick time. Args: partialTickTime 216 */ 217 public void getMouseOver(float par1) 218 { 219 if (this.mc.renderViewEntity != null) 220 { 221 if (this.mc.theWorld != null) 222 { 223 double var2 = (double)this.mc.playerController.getBlockReachDistance(); 224 this.mc.objectMouseOver = this.mc.renderViewEntity.rayTrace(var2, par1); 225 double var4 = var2; 226 Vec3 var6 = this.mc.renderViewEntity.getPosition(par1); 227 228 if (this.mc.playerController.extendedReach()) 229 { 230 var2 = 6.0D; 231 var4 = 6.0D; 232 } 233 else 234 { 235 if (var2 > 3.0D) 236 { 237 var4 = 3.0D; 238 } 239 240 var2 = var4; 241 } 242 243 if (this.mc.objectMouseOver != null) 244 { 245 var4 = this.mc.objectMouseOver.hitVec.distanceTo(var6); 246 } 247 248 Vec3 var7 = this.mc.renderViewEntity.getLook(par1); 249 Vec3 var8 = var6.addVector(var7.xCoord * var2, var7.yCoord * var2, var7.zCoord * var2); 250 this.pointedEntity = null; 251 float var9 = 1.0F; 252 List var10 = this.mc.theWorld.getEntitiesWithinAABBExcludingEntity(this.mc.renderViewEntity, this.mc.renderViewEntity.boundingBox.addCoord(var7.xCoord * var2, var7.yCoord * var2, var7.zCoord * var2).expand((double)var9, (double)var9, (double)var9)); 253 double var11 = var4; 254 Iterator var13 = var10.iterator(); 255 256 while (var13.hasNext()) 257 { 258 Entity var14 = (Entity)var13.next(); 259 260 if (var14.canBeCollidedWith()) 261 { 262 float var15 = var14.getCollisionBorderSize(); 263 AxisAlignedBB var16 = var14.boundingBox.expand((double)var15, (double)var15, (double)var15); 264 MovingObjectPosition var17 = var16.calculateIntercept(var6, var8); 265 266 if (var16.isVecInside(var6)) 267 { 268 if (0.0D < var11 || var11 == 0.0D) 269 { 270 this.pointedEntity = var14; 271 var11 = 0.0D; 272 } 273 } 274 else if (var17 != null) 275 { 276 double var18 = var6.distanceTo(var17.hitVec); 277 278 if (var18 < var11 || var11 == 0.0D) 279 { 280 this.pointedEntity = var14; 281 var11 = var18; 282 } 283 } 284 } 285 } 286 287 if (this.pointedEntity != null && (var11 < var4 || this.mc.objectMouseOver == null)) 288 { 289 this.mc.objectMouseOver = new MovingObjectPosition(this.pointedEntity); 290 } 291 } 292 } 293 } 294 295 /** 296 * Update FOV modifier hand 297 */ 298 private void updateFovModifierHand() 299 { 300 if (mc.renderViewEntity instanceof EntityPlayerSP) 301 { 302 EntityPlayerSP var1 = (EntityPlayerSP)this.mc.renderViewEntity; 303 this.fovMultiplierTemp = var1.getFOVMultiplier(); 304 } 305 else 306 { 307 this.fovMultiplierTemp = mc.thePlayer.getFOVMultiplier(); 308 } 309 this.fovModifierHandPrev = this.fovModifierHand; 310 this.fovModifierHand += (this.fovMultiplierTemp - this.fovModifierHand) * 0.5F; 311 } 312 313 /** 314 * Changes the field of view of the player depending on if they are underwater or not 315 */ 316 private float getFOVModifier(float par1, boolean par2) 317 { 318 if (this.debugViewDirection > 0) 319 { 320 return 90.0F; 321 } 322 else 323 { 324 EntityLiving var3 = (EntityLiving)this.mc.renderViewEntity; 325 float var4 = 70.0F; 326 327 if (par2) 328 { 329 var4 += this.mc.gameSettings.fovSetting * 40.0F; 330 var4 *= this.fovModifierHandPrev + (this.fovModifierHand - this.fovModifierHandPrev) * par1; 331 } 332 333 if (var3.getHealth() <= 0) 334 { 335 float var5 = (float)var3.deathTime + par1; 336 var4 /= (1.0F - 500.0F / (var5 + 500.0F)) * 2.0F + 1.0F; 337 } 338 339 int var6 = ActiveRenderInfo.getBlockIdAtEntityViewpoint(this.mc.theWorld, var3, par1); 340 341 if (var6 != 0 && Block.blocksList[var6].blockMaterial == Material.water) 342 { 343 var4 = var4 * 60.0F / 70.0F; 344 } 345 346 return var4 + this.prevDebugCamFOV + (this.debugCamFOV - this.prevDebugCamFOV) * par1; 347 } 348 } 349 350 private void hurtCameraEffect(float par1) 351 { 352 EntityLiving var2 = this.mc.renderViewEntity; 353 float var3 = (float)var2.hurtTime - par1; 354 float var4; 355 356 if (var2.getHealth() <= 0) 357 { 358 var4 = (float)var2.deathTime + par1; 359 GL11.glRotatef(40.0F - 8000.0F / (var4 + 200.0F), 0.0F, 0.0F, 1.0F); 360 } 361 362 if (var3 >= 0.0F) 363 { 364 var3 /= (float)var2.maxHurtTime; 365 var3 = MathHelper.sin(var3 * var3 * var3 * var3 * (float)Math.PI); 366 var4 = var2.attackedAtYaw; 367 GL11.glRotatef(-var4, 0.0F, 1.0F, 0.0F); 368 GL11.glRotatef(-var3 * 14.0F, 0.0F, 0.0F, 1.0F); 369 GL11.glRotatef(var4, 0.0F, 1.0F, 0.0F); 370 } 371 } 372 373 /** 374 * Setups all the GL settings for view bobbing. Args: partialTickTime 375 */ 376 private void setupViewBobbing(float par1) 377 { 378 if (this.mc.renderViewEntity instanceof EntityPlayer) 379 { 380 EntityPlayer var2 = (EntityPlayer)this.mc.renderViewEntity; 381 float var3 = var2.distanceWalkedModified - var2.prevDistanceWalkedModified; 382 float var4 = -(var2.distanceWalkedModified + var3 * par1); 383 float var5 = var2.prevCameraYaw + (var2.cameraYaw - var2.prevCameraYaw) * par1; 384 float var6 = var2.prevCameraPitch + (var2.cameraPitch - var2.prevCameraPitch) * par1; 385 GL11.glTranslatef(MathHelper.sin(var4 * (float)Math.PI) * var5 * 0.5F, -Math.abs(MathHelper.cos(var4 * (float)Math.PI) * var5), 0.0F); 386 GL11.glRotatef(MathHelper.sin(var4 * (float)Math.PI) * var5 * 3.0F, 0.0F, 0.0F, 1.0F); 387 GL11.glRotatef(Math.abs(MathHelper.cos(var4 * (float)Math.PI - 0.2F) * var5) * 5.0F, 1.0F, 0.0F, 0.0F); 388 GL11.glRotatef(var6, 1.0F, 0.0F, 0.0F); 389 } 390 } 391 392 /** 393 * sets up player's eye (or camera in third person mode) 394 */ 395 private void orientCamera(float par1) 396 { 397 EntityLiving var2 = this.mc.renderViewEntity; 398 float var3 = var2.yOffset - 1.62F; 399 double var4 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)par1; 400 double var6 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)par1 - (double)var3; 401 double var8 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)par1; 402 GL11.glRotatef(this.prevCamRoll + (this.camRoll - this.prevCamRoll) * par1, 0.0F, 0.0F, 1.0F); 403 404 if (var2.isPlayerSleeping()) 405 { 406 var3 = (float)((double)var3 + 1.0D); 407 GL11.glTranslatef(0.0F, 0.3F, 0.0F); 408 409 if (!this.mc.gameSettings.debugCamEnable) 410 { 411 ForgeHooksClient.orientBedCamera(mc, var2); 412 GL11.glRotatef(var2.prevRotationYaw + (var2.rotationYaw - var2.prevRotationYaw) * par1 + 180.0F, 0.0F, -1.0F, 0.0F); 413 GL11.glRotatef(var2.prevRotationPitch + (var2.rotationPitch - var2.prevRotationPitch) * par1, -1.0F, 0.0F, 0.0F); 414 } 415 } 416 else if (this.mc.gameSettings.thirdPersonView > 0) 417 { 418 double var27 = (double)(this.thirdPersonDistanceTemp + (this.thirdPersonDistance - this.thirdPersonDistanceTemp) * par1); 419 float var13; 420 float var28; 421 422 if (this.mc.gameSettings.debugCamEnable) 423 { 424 var28 = this.prevDebugCamYaw + (this.debugCamYaw - this.prevDebugCamYaw) * par1; 425 var13 = this.prevDebugCamPitch + (this.debugCamPitch - this.prevDebugCamPitch) * par1; 426 GL11.glTranslatef(0.0F, 0.0F, (float)(-var27)); 427 GL11.glRotatef(var13, 1.0F, 0.0F, 0.0F); 428 GL11.glRotatef(var28, 0.0F, 1.0F, 0.0F); 429 } 430 else 431 { 432 var28 = var2.rotationYaw; 433 var13 = var2.rotationPitch; 434 435 if (this.mc.gameSettings.thirdPersonView == 2) 436 { 437 var13 += 180.0F; 438 } 439 440 double var14 = (double)(-MathHelper.sin(var28 / 180.0F * (float)Math.PI) * MathHelper.cos(var13 / 180.0F * (float)Math.PI)) * var27; 441 double var16 = (double)(MathHelper.cos(var28 / 180.0F * (float)Math.PI) * MathHelper.cos(var13 / 180.0F * (float)Math.PI)) * var27; 442 double var18 = (double)(-MathHelper.sin(var13 / 180.0F * (float)Math.PI)) * var27; 443 444 for (int var20 = 0; var20 < 8; ++var20) 445 { 446 float var21 = (float)((var20 & 1) * 2 - 1); 447 float var22 = (float)((var20 >> 1 & 1) * 2 - 1); 448 float var23 = (float)((var20 >> 2 & 1) * 2 - 1); 449 var21 *= 0.1F; 450 var22 *= 0.1F; 451 var23 *= 0.1F; 452 MovingObjectPosition var24 = this.mc.theWorld.rayTraceBlocks(Vec3.getVec3Pool().getVecFromPool(var4 + (double)var21, var6 + (double)var22, var8 + (double)var23), Vec3.getVec3Pool().getVecFromPool(var4 - var14 + (double)var21 + (double)var23, var6 - var18 + (double)var22, var8 - var16 + (double)var23)); 453 454 if (var24 != null) 455 { 456 double var25 = var24.hitVec.distanceTo(Vec3.getVec3Pool().getVecFromPool(var4, var6, var8)); 457 458 if (var25 < var27) 459 { 460 var27 = var25; 461 } 462 } 463 } 464 465 if (this.mc.gameSettings.thirdPersonView == 2) 466 { 467 GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); 468 } 469 470 GL11.glRotatef(var2.rotationPitch - var13, 1.0F, 0.0F, 0.0F); 471 GL11.glRotatef(var2.rotationYaw - var28, 0.0F, 1.0F, 0.0F); 472 GL11.glTranslatef(0.0F, 0.0F, (float)(-var27)); 473 GL11.glRotatef(var28 - var2.rotationYaw, 0.0F, 1.0F, 0.0F); 474 GL11.glRotatef(var13 - var2.rotationPitch, 1.0F, 0.0F, 0.0F); 475 } 476 } 477 else 478 { 479 GL11.glTranslatef(0.0F, 0.0F, -0.1F); 480 } 481 482 if (!this.mc.gameSettings.debugCamEnable) 483 { 484 GL11.glRotatef(var2.prevRotationPitch + (var2.rotationPitch - var2.prevRotationPitch) * par1, 1.0F, 0.0F, 0.0F); 485 GL11.glRotatef(var2.prevRotationYaw + (var2.rotationYaw - var2.prevRotationYaw) * par1 + 180.0F, 0.0F, 1.0F, 0.0F); 486 } 487 488 GL11.glTranslatef(0.0F, var3, 0.0F); 489 var4 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)par1; 490 var6 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)par1 - (double)var3; 491 var8 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)par1; 492 this.cloudFog = this.mc.renderGlobal.func_72721_a(var4, var6, var8, par1); 493 } 494 495 /** 496 * sets up projection, view effects, camera position/rotation 497 */ 498 private void setupCameraTransform(float par1, int par2) 499 { 500 this.farPlaneDistance = (float)(256 >> this.mc.gameSettings.renderDistance); 501 GL11.glMatrixMode(GL11.GL_PROJECTION); 502 GL11.glLoadIdentity(); 503 float var3 = 0.07F; 504 505 if (this.mc.gameSettings.anaglyph) 506 { 507 GL11.glTranslatef((float)(-(par2 * 2 - 1)) * var3, 0.0F, 0.0F); 508 } 509 510 if (this.cameraZoom != 1.0D) 511 { 512 GL11.glTranslatef((float)this.cameraYaw, (float)(-this.cameraPitch), 0.0F); 513 GL11.glScaled(this.cameraZoom, this.cameraZoom, 1.0D); 514 } 515 516 GLU.gluPerspective(this.getFOVModifier(par1, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); 517 float var4; 518 519 if (this.mc.playerController.func_78747_a()) 520 { 521 var4 = 0.6666667F; 522 GL11.glScalef(1.0F, var4, 1.0F); 523 } 524 525 GL11.glMatrixMode(GL11.GL_MODELVIEW); 526 GL11.glLoadIdentity(); 527 528 if (this.mc.gameSettings.anaglyph) 529 { 530 GL11.glTranslatef((float)(par2 * 2 - 1) * 0.1F, 0.0F, 0.0F); 531 } 532 533 this.hurtCameraEffect(par1); 534 535 if (this.mc.gameSettings.viewBobbing) 536 { 537 this.setupViewBobbing(par1); 538 } 539 540 var4 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * par1; 541 542 if (var4 > 0.0F) 543 { 544 byte var5 = 20; 545 546 if (this.mc.thePlayer.isPotionActive(Potion.confusion)) 547 { 548 var5 = 7; 549 } 550 551 float var6 = 5.0F / (var4 * var4 + 5.0F) - var4 * 0.04F; 552 var6 *= var6; 553 GL11.glRotatef(((float)this.rendererUpdateCount + par1) * (float)var5, 0.0F, 1.0F, 1.0F); 554 GL11.glScalef(1.0F / var6, 1.0F, 1.0F); 555 GL11.glRotatef(-((float)this.rendererUpdateCount + par1) * (float)var5, 0.0F, 1.0F, 1.0F); 556 } 557 558 this.orientCamera(par1); 559 560 if (this.debugViewDirection > 0) 561 { 562 int var7 = this.debugViewDirection - 1; 563 564 if (var7 == 1) 565 { 566 GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); 567 } 568 569 if (var7 == 2) 570 { 571 GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); 572 } 573 574 if (var7 == 3) 575 { 576 GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); 577 } 578 579 if (var7 == 4) 580 { 581 GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); 582 } 583 584 if (var7 == 5) 585 { 586 GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); 587 } 588 } 589 } 590 591 /** 592 * Render player hand 593 */ 594 private void renderHand(float par1, int par2) 595 { 596 if (this.debugViewDirection <= 0) 597 { 598 GL11.glMatrixMode(GL11.GL_PROJECTION); 599 GL11.glLoadIdentity(); 600 float var3 = 0.07F; 601 602 if (this.mc.gameSettings.anaglyph) 603 { 604 GL11.glTranslatef((float)(-(par2 * 2 - 1)) * var3, 0.0F, 0.0F); 605 } 606 607 if (this.cameraZoom != 1.0D) 608 { 609 GL11.glTranslatef((float)this.cameraYaw, (float)(-this.cameraPitch), 0.0F); 610 GL11.glScaled(this.cameraZoom, this.cameraZoom, 1.0D); 611 } 612 613 GLU.gluPerspective(this.getFOVModifier(par1, false), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); 614 615 if (this.mc.playerController.func_78747_a()) 616 { 617 float var4 = 0.6666667F; 618 GL11.glScalef(1.0F, var4, 1.0F); 619 } 620 621 GL11.glMatrixMode(GL11.GL_MODELVIEW); 622 GL11.glLoadIdentity(); 623 624 if (this.mc.gameSettings.anaglyph) 625 { 626 GL11.glTranslatef((float)(par2 * 2 - 1) * 0.1F, 0.0F, 0.0F); 627 } 628 629 GL11.glPushMatrix(); 630 this.hurtCameraEffect(par1); 631 632 if (this.mc.gameSettings.viewBobbing) 633 { 634 this.setupViewBobbing(par1); 635 } 636 637 if (this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping() && !this.mc.gameSettings.hideGUI && !this.mc.playerController.func_78747_a()) 638 { 639 this.enableLightmap((double)par1); 640 this.itemRenderer.renderItemInFirstPerson(par1); 641 this.disableLightmap((double)par1); 642 } 643 644 GL11.glPopMatrix(); 645 646 if (this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping()) 647 { 648 this.itemRenderer.renderOverlays(par1); 649 this.hurtCameraEffect(par1); 650 } 651 652 if (this.mc.gameSettings.viewBobbing) 653 { 654 this.setupViewBobbing(par1); 655 } 656 } 657 } 658 659 /** 660 * Disable secondary texture unit used by lightmap 661 */ 662 public void disableLightmap(double par1) 663 { 664 OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); 665 GL11.glDisable(GL11.GL_TEXTURE_2D); 666 OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); 667 } 668 669 /** 670 * Enable lightmap in secondary texture unit 671 */ 672 public void enableLightmap(double par1) 673 { 674 OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); 675 GL11.glMatrixMode(GL11.GL_TEXTURE); 676 GL11.glLoadIdentity(); 677 float var3 = 0.00390625F; 678 GL11.glScalef(var3, var3, var3); 679 GL11.glTranslatef(8.0F, 8.0F, 8.0F); 680 GL11.glMatrixMode(GL11.GL_MODELVIEW); 681 this.mc.renderEngine.bindTexture(this.lightmapTexture); 682 GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); 683 GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); 684 GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); 685 GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); 686 GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP); 687 GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); 688 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 689 GL11.glEnable(GL11.GL_TEXTURE_2D); 690 OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); 691 } 692 693 /** 694 * Recompute a random value that is applied to block color in updateLightmap() 695 */ 696 private void updateTorchFlicker() 697 { 698 this.torchFlickerDX = (float)((double)this.torchFlickerDX + (Math.random() - Math.random()) * Math.random() * Math.random()); 699 this.torchFlickerDY = (float)((double)this.torchFlickerDY + (Math.random() - Math.random()) * Math.random() * Math.random()); 700 this.torchFlickerDX = (float)((double)this.torchFlickerDX * 0.9D); 701 this.torchFlickerDY = (float)((double)this.torchFlickerDY * 0.9D); 702 this.torchFlickerX += (this.torchFlickerDX - this.torchFlickerX) * 1.0F; 703 this.torchFlickerY += (this.torchFlickerDY - this.torchFlickerY) * 1.0F; 704 this.lightmapUpdateNeeded = true; 705 } 706 707 private void updateLightmap() 708 { 709 WorldClient var1 = this.mc.theWorld; 710 711 if (var1 != null) 712 { 713 for (int var2 = 0; var2 < 256; ++var2) 714 { 715 float var3 = var1.func_72971_b(1.0F) * 0.95F + 0.05F; 716 float var4 = var1.provider.lightBrightnessTable[var2 / 16] * var3; 717 float var5 = var1.provider.lightBrightnessTable[var2 % 16] * (this.torchFlickerX * 0.1F + 1.5F); 718 719 if (var1.lightningFlash > 0) 720 { 721 var4 = var1.provider.lightBrightnessTable[var2 / 16]; 722 } 723 724 float var6 = var4 * (var1.func_72971_b(1.0F) * 0.65F + 0.35F); 725 float var7 = var4 * (var1.func_72971_b(1.0F) * 0.65F + 0.35F); 726 float var10 = var5 * ((var5 * 0.6F + 0.4F) * 0.6F + 0.4F); 727 float var11 = var5 * (var5 * var5 * 0.6F + 0.4F); 728 float var12 = var6 + var5; 729 float var13 = var7 + var10; 730 float var14 = var4 + var11; 731 var12 = var12 * 0.96F + 0.03F; 732 var13 = var13 * 0.96F + 0.03F; 733 var14 = var14 * 0.96F + 0.03F; 734 735 if (var1.provider.worldType == 1) 736 { 737 var12 = 0.22F + var5 * 0.75F; 738 var13 = 0.28F + var10 * 0.75F; 739 var14 = 0.25F + var11 * 0.75F; 740 } 741 742 float var15 = this.mc.gameSettings.gammaSetting; 743 744 if (var12 > 1.0F) 745 { 746 var12 = 1.0F; 747 } 748 749 if (var13 > 1.0F) 750 { 751 var13 = 1.0F; 752 } 753 754 if (var14 > 1.0F) 755 { 756 var14 = 1.0F; 757 } 758 759 float var16 = 1.0F - var12; 760 float var17 = 1.0F - var13; 761 float var18 = 1.0F - var14; 762 var16 = 1.0F - var16 * var16 * var16 * var16; 763 var17 = 1.0F - var17 * var17 * var17 * var17; 764 var18 = 1.0F - var18 * var18 * var18 * var18; 765 var12 = var12 * (1.0F - var15) + var16 * var15; 766 var13 = var13 * (1.0F - var15) + var17 * var15; 767 var14 = var14 * (1.0F - var15) + var18 * var15; 768 var12 = var12 * 0.96F + 0.03F; 769 var13 = var13 * 0.96F + 0.03F; 770 var14 = var14 * 0.96F + 0.03F; 771 772 if (var12 > 1.0F) 773 { 774 var12 = 1.0F; 775 } 776 777 if (var13 > 1.0F) 778 { 779 var13 = 1.0F; 780 } 781 782 if (var14 > 1.0F) 783 { 784 var14 = 1.0F; 785 } 786 787 if (var12 < 0.0F) 788 { 789 var12 = 0.0F; 790 } 791 792 if (var13 < 0.0F) 793 { 794 var13 = 0.0F; 795 } 796 797 if (var14 < 0.0F) 798 { 799 var14 = 0.0F; 800 } 801 802 short var19 = 255; 803 int var20 = (int)(var12 * 255.0F); 804 int var21 = (int)(var13 * 255.0F); 805 int var22 = (int)(var14 * 255.0F); 806 this.lightmapColors[var2] = var19 << 24 | var20 << 16 | var21 << 8 | var22; 807 } 808 809 this.mc.renderEngine.createTextureFromBytes(this.lightmapColors, 16, 16, this.lightmapTexture); 810 } 811 } 812 813 /** 814 * Will update any inputs that effect the camera angle (mouse) and then render the world and GUI 815 */ 816 public void updateCameraAndRender(float par1) 817 { 818 this.mc.mcProfiler.startSection("lightTex"); 819 820 if (this.lightmapUpdateNeeded) 821 { 822 this.updateLightmap(); 823 } 824 825 this.mc.mcProfiler.endSection(); 826 827 if (Display.isActive()) 828 { 829 this.prevFrameTime = Minecraft.getSystemTime(); 830 } 831 else if (Minecraft.getSystemTime() - this.prevFrameTime > 500L) 832 { 833 this.mc.displayInGameMenu(); 834 } 835 836 this.mc.mcProfiler.startSection("mouse"); 837 838 if (this.mc.inGameHasFocus) 839 { 840 this.mc.mouseHelper.mouseXYChange(); 841 float var2 = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F; 842 float var3 = var2 * var2 * var2 * 8.0F; 843 float var4 = (float)this.mc.mouseHelper.deltaX * var3; 844 float var5 = (float)this.mc.mouseHelper.deltaY * var3; 845 byte var6 = 1; 846 847 if (this.mc.gameSettings.invertMouse) 848 { 849 var6 = -1; 850 } 851 852 if (this.mc.gameSettings.smoothCamera) 853 { 854 this.smoothCamYaw += var4; 855 this.smoothCamPitch += var5; 856 float var7 = par1 - this.smoothCamPartialTicks; 857 this.smoothCamPartialTicks = par1; 858 var4 = this.smoothCamFilterX * var7; 859 var5 = this.smoothCamFilterY * var7; 860 this.mc.thePlayer.setAngles(var4, var5 * (float)var6); 861 } 862 else 863 { 864 this.mc.thePlayer.setAngles(var4, var5 * (float)var6); 865 } 866 } 867 868 this.mc.mcProfiler.endSection(); 869 870 if (!this.mc.skipRenderWorld) 871 { 872 anaglyphEnable = this.mc.gameSettings.anaglyph; 873 ScaledResolution var8 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); 874 int var9 = var8.getScaledWidth(); 875 int var10 = var8.getScaledHeight(); 876 int var11 = Mouse.getX() * var9 / this.mc.displayWidth; 877 int var13 = var10 - Mouse.getY() * var10 / this.mc.displayHeight - 1; 878 int var12 = func_78465_a(this.mc.gameSettings.limitFramerate); 879 880 if (this.mc.theWorld != null) 881 { 882 this.mc.mcProfiler.startSection("level"); 883 884 if (this.mc.gameSettings.limitFramerate == 0) 885 { 886 this.renderWorld(par1, 0L); 887 } 888 else 889 { 890 this.renderWorld(par1, this.renderEndNanoTime + (long)(1000000000 / var12)); 891 } 892 893 this.renderEndNanoTime = System.nanoTime(); 894 this.mc.mcProfiler.endStartSection("gui"); 895 896 if (!this.mc.gameSettings.hideGUI || this.mc.currentScreen != null) 897 { 898 this.mc.ingameGUI.renderGameOverlay(par1, this.mc.currentScreen != null, var11, var13); 899 } 900 901 this.mc.mcProfiler.endSection(); 902 } 903 else 904 { 905 GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); 906 GL11.glMatrixMode(GL11.GL_PROJECTION); 907 GL11.glLoadIdentity(); 908 GL11.glMatrixMode(GL11.GL_MODELVIEW); 909 GL11.glLoadIdentity(); 910 this.setupOverlayRendering(); 911 this.renderEndNanoTime = System.nanoTime(); 912 } 913 914 if (this.mc.currentScreen != null) 915 { 916 GL11.glClear(256); 917 this.mc.currentScreen.drawScreen(var11, var13, par1); 918 919 if (this.mc.currentScreen != null && this.mc.currentScreen.guiParticles != null) 920 { 921 this.mc.currentScreen.guiParticles.draw(par1); 922 } 923 } 924 } 925 } 926 927 public void renderWorld(float par1, long par2) 928 { 929 this.mc.mcProfiler.startSection("lightTex"); 930 931 if (this.lightmapUpdateNeeded) 932 { 933 this.updateLightmap(); 934 } 935 936 GL11.glEnable(GL11.GL_CULL_FACE); 937 GL11.glEnable(GL11.GL_DEPTH_TEST); 938 939 if (this.mc.renderViewEntity == null) 940 { 941 this.mc.renderViewEntity = this.mc.thePlayer; 942 } 943 944 this.mc.mcProfiler.endStartSection("pick"); 945 this.getMouseOver(par1); 946 EntityLiving var4 = this.mc.renderViewEntity; 947 RenderGlobal var5 = this.mc.renderGlobal; 948 EffectRenderer var6 = this.mc.effectRenderer; 949 double var7 = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)par1; 950 double var9 = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)par1; 951 double var11 = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)par1; 952 this.mc.mcProfiler.endStartSection("center"); 953 954 for (int var13 = 0; var13 < 2; ++var13) 955 { 956 if (this.mc.gameSettings.anaglyph) 957 { 958 anaglyphField = var13; 959 960 if (anaglyphField == 0) 961 { 962 GL11.glColorMask(false, true, true, false); 963 } 964 else 965 { 966 GL11.glColorMask(true, false, false, false); 967 } 968 } 969 970 this.mc.mcProfiler.endStartSection("clear"); 971 GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); 972 this.updateFogColor(par1); 973 GL11.glClear(16640); 974 GL11.glEnable(GL11.GL_CULL_FACE); 975 this.mc.mcProfiler.endStartSection("camera"); 976 this.setupCameraTransform(par1, var13); 977 ActiveRenderInfo.updateRenderInfo(this.mc.thePlayer, this.mc.gameSettings.thirdPersonView == 2); 978 this.mc.mcProfiler.endStartSection("frustrum"); 979 ClippingHelperImpl.getInstance(); 980 981 if (this.mc.gameSettings.renderDistance < 2) 982 { 983 this.setupFog(-1, par1); 984 this.mc.mcProfiler.endStartSection("sky"); 985 var5.renderSky(par1); 986 } 987 988 GL11.glEnable(GL11.GL_FOG); 989 this.setupFog(1, par1); 990 991 if (this.mc.gameSettings.ambientOcclusion) 992 { 993 GL11.glShadeModel(GL11.GL_SMOOTH); 994 } 995 996 this.mc.mcProfiler.endStartSection("culling"); 997 Frustrum var14 = new Frustrum(); 998 var14.setPosition(var7, var9, var11); 999 this.mc.renderGlobal.clipRenderersByFrustum(var14, par1); 1000 1001 if (var13 == 0) 1002 { 1003 this.mc.mcProfiler.endStartSection("updatechunks"); 1004 1005 while (!this.mc.renderGlobal.updateRenderers(var4, false) && par2 != 0L) 1006 { 1007 long var15 = par2 - System.nanoTime(); 1008 1009 if (var15 < 0L || var15 > 1000000000L) 1010 { 1011 break; 1012 } 1013 } 1014 } 1015 1016 this.setupFog(0, par1); 1017 GL11.glEnable(GL11.GL_FOG); 1018 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); 1019 RenderHelper.disableStandardItemLighting(); 1020 this.mc.mcProfiler.endStartSection("terrain"); 1021 var5.sortAndRender(var4, 0, (double)par1); 1022 GL11.glShadeModel(GL11.GL_FLAT); 1023 EntityPlayer var17; 1024 1025 if (this.debugViewDirection == 0) 1026 { 1027 RenderHelper.enableStandardItemLighting(); 1028 this.mc.mcProfiler.endStartSection("entities"); 1029 var5.renderEntities(var4.getPosition(par1), var14, par1); 1030 this.enableLightmap((double)par1); 1031 this.mc.mcProfiler.endStartSection("litParticles"); 1032 var6.func_78872_b(var4, par1); 1033 RenderHelper.disableStandardItemLighting(); 1034 this.setupFog(0, par1); 1035 this.mc.mcProfiler.endStartSection("particles"); 1036 var6.renderParticles(var4, par1); 1037 this.disableLightmap((double)par1); 1038 1039 if (this.mc.objectMouseOver != null && var4.isInsideOfMaterial(Material.water) && var4 instanceof EntityPlayer && !this.mc.gameSettings.hideGUI) 1040 { 1041 var17 = (EntityPlayer)var4; 1042 GL11.glDisable(GL11.GL_ALPHA_TEST); 1043 this.mc.mcProfiler.endStartSection("outline"); 1044 if (!ForgeHooksClient.onDrawBlockHighlight(var5, var17, mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1)) 1045 { 1046 var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); 1047 var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); 1048 } 1049 GL11.glEnable(GL11.GL_ALPHA_TEST); 1050 } 1051 } 1052 1053 GL11.glDisable(GL11.GL_BLEND); 1054 GL11.glEnable(GL11.GL_CULL_FACE); 1055 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 1056 GL11.glDepthMask(true); 1057 this.setupFog(0, par1); 1058 GL11.glEnable(GL11.GL_BLEND); 1059 GL11.glDisable(GL11.GL_CULL_FACE); 1060 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); 1061 1062 if (this.mc.gameSettings.fancyGraphics) 1063 { 1064 this.mc.mcProfiler.endStartSection("water"); 1065 1066 if (this.mc.gameSettings.ambientOcclusion) 1067 { 1068 GL11.glShadeModel(GL11.GL_SMOOTH); 1069 } 1070 1071 GL11.glColorMask(false, false, false, false); 1072 int var18 = var5.sortAndRender(var4, 1, (double)par1); 1073 1074 if (this.mc.gameSettings.anaglyph) 1075 { 1076 if (anaglyphField == 0) 1077 { 1078 GL11.glColorMask(false, true, true, true); 1079 } 1080 else 1081 { 1082 GL11.glColorMask(true, false, false, true); 1083 } 1084 } 1085 else 1086 { 1087 GL11.glColorMask(true, true, true, true); 1088 } 1089 1090 if (var18 > 0) 1091 { 1092 var5.renderAllRenderLists(1, (double)par1); 1093 } 1094 1095 GL11.glShadeModel(GL11.GL_FLAT); 1096 } 1097 else 1098 { 1099 this.mc.mcProfiler.endStartSection("water"); 1100 var5.sortAndRender(var4, 1, (double)par1); 1101 } 1102 1103 GL11.glDepthMask(true); 1104 GL11.glEnable(GL11.GL_CULL_FACE); 1105 GL11.glDisable(GL11.GL_BLEND); 1106 1107 if (this.cameraZoom == 1.0D && var4 instanceof EntityPlayer && !this.mc.gameSettings.hideGUI && this.mc.objectMouseOver != null && !var4.isInsideOfMaterial(Material.water)) 1108 { 1109 var17 = (EntityPlayer)var4; 1110 GL11.glDisable(GL11.GL_ALPHA_TEST); 1111 this.mc.mcProfiler.endStartSection("outline"); 1112 if (!ForgeHooksClient.onDrawBlockHighlight(var5, var17, mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1)) 1113 { 1114 var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); 1115 var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); 1116 } 1117 GL11.glEnable(GL11.GL_ALPHA_TEST); 1118 } 1119 1120 this.mc.mcProfiler.endStartSection("destroyProgress"); 1121 GL11.glEnable(GL11.GL_BLEND); 1122 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); 1123 var5.drawBlockDamageTexture(Tessellator.instance, (EntityPlayer)var4, par1); 1124 GL11.glDisable(GL11.GL_BLEND); 1125 this.mc.mcProfiler.endStartSection("weather"); 1126 this.renderRainSnow(par1); 1127 GL11.glDisable(GL11.GL_FOG); 1128 1129 if (this.mc.gameSettings.shouldRenderClouds()) 1130 { 1131 this.mc.mcProfiler.endStartSection("clouds"); 1132 GL11.glPushMatrix(); 1133 this.setupFog(0, par1); 1134 GL11.glEnable(GL11.GL_FOG); 1135 var5.renderClouds(par1); 1136 GL11.glDisable(GL11.GL_FOG); 1137 this.setupFog(1, par1); 1138 GL11.glPopMatrix(); 1139 } 1140 1141 this.mc.mcProfiler.endStartSection("FRenderLast"); 1142 ForgeHooksClient.dispatchRenderLast(var5, par1); 1143 1144 this.mc.mcProfiler.endStartSection("hand"); 1145 1146 if (this.cameraZoom == 1.0D) 1147 { 1148 GL11.glClear(256); 1149 this.renderHand(par1, var13); 1150 } 1151 1152 if (!this.mc.gameSettings.anaglyph) 1153 { 1154 this.mc.mcProfiler.endSection(); 1155 return; 1156 } 1157 } 1158 1159 GL11.glColorMask(true, true, true, false); 1160 this.mc.mcProfiler.endSection(); 1161 } 1162 1163 private void addRainParticles() 1164 { 1165 float var1 = this.mc.theWorld.getRainStrength(1.0F); 1166 1167 if (!this.mc.gameSettings.fancyGraphics) 1168 { 1169 var1 /= 2.0F; 1170 } 1171 1172 if (var1 != 0.0F) 1173 { 1174 this.random.setSeed((long)this.rendererUpdateCount * 312987231L); 1175 EntityLiving var2 = this.mc.renderViewEntity; 1176 WorldClient var3 = this.mc.theWorld; 1177 int var4 = MathHelper.floor_double(var2.posX); 1178 int var5 = MathHelper.floor_double(var2.posY); 1179 int var6 = MathHelper.floor_double(var2.posZ); 1180 byte var7 = 10; 1181 double var8 = 0.0D; 1182 double var10 = 0.0D; 1183 double var12 = 0.0D; 1184 int var14 = 0; 1185 int var15 = (int)(100.0F * var1 * var1); 1186 1187 if (this.mc.gameSettings.particleSetting == 1) 1188 { 1189 var15 >>= 1; 1190 } 1191 else if (this.mc.gameSettings.particleSetting == 2) 1192 { 1193 var15 = 0; 1194 } 1195 1196 for (int var16 = 0; var16 < var15; ++var16) 1197 { 1198 int var17 = var4 + this.random.nextInt(var7) - this.random.nextInt(var7); 1199 int var18 = var6 + this.random.nextInt(var7) - this.random.nextInt(var7); 1200 int var19 = var3.getPrecipitationHeight(var17, var18); 1201 int var20 = var3.getBlockId(var17, var19 - 1, var18); 1202 BiomeGenBase var21 = var3.getBiomeGenForCoords(var17, var18); 1203 1204 if (var19 <= var5 + var7 && var19 >= var5 - var7 && var21.canSpawnLightningBolt() && var21.getFloatTemperature() >= 0.2F) 1205 { 1206 float var22 = this.random.nextFloat(); 1207 float var23 = this.random.nextFloat(); 1208 1209 if (var20 > 0) 1210 { 1211 if (Block.blocksList[var20].blockMaterial == Material.lava) 1212 { 1213 this.mc.effectRenderer.addEffect(new EntitySmokeFX(var3, (double)((float)var17 + var22), (double)((float)var19 + 0.1F) - Block.blocksList[var20].minY, (double)((float)var18 + var23), 0.0D, 0.0D, 0.0D)); 1214 } 1215 else 1216 { 1217 ++var14; 1218 1219 if (this.random.nextInt(var14) == 0) 1220 { 1221 var8 = (double)((float)var17 + var22); 1222 var10 = (double)((float)var19 + 0.1F) - Block.blocksList[var20].minY; 1223 var12 = (double)((float)var18 + var23); 1224 } 1225 1226 this.mc.effectRenderer.addEffect(new EntityRainFX(var3, (double)((float)var17 + var22), (double)((float)var19 + 0.1F) - Block.blocksList[var20].minY, (double)((float)var18 + var23))); 1227 } 1228 } 1229 } 1230 } 1231 1232 if (var14 > 0 && this.random.nextInt(3) < this.rainSoundCounter++) 1233 { 1234 this.rainSoundCounter = 0; 1235 1236 if (var10 > var2.posY + 1.0D && var3.getPrecipitationHeight(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posZ)) > MathHelper.floor_double(var2.posY)) 1237 { 1238 this.mc.theWorld.playSound(var8, var10, var12, "ambient.weather.rain", 0.1F, 0.5F); 1239 } 1240 else 1241 { 1242 this.mc.theWorld.playSound(var8, var10, var12, "ambient.weather.rain", 0.2F, 1.0F); 1243 } 1244 } 1245 } 1246 } 1247 1248 /** 1249 * Render rain and snow 1250 */ 1251 protected void renderRainSnow(float par1) 1252 { 1253 float var2 = this.mc.theWorld.getRainStrength(par1); 1254 1255 if (var2 > 0.0F) 1256 { 1257 this.enableLightmap((double)par1); 1258 1259 if (this.rainXCoords == null) 1260 { 1261 this.rainXCoords = new float[1024]; 1262 this.rainYCoords = new float[1024]; 1263 1264 for (int var3 = 0; var3 < 32; ++var3) 1265 { 1266 for (int var4 = 0; var4 < 32; ++var4) 1267 { 1268 float var5 = (float)(var4 - 16); 1269 float var6 = (float)(var3 - 16); 1270 float var7 = MathHelper.sqrt_float(var5 * var5 + var6 * var6); 1271 this.rainXCoords[var3 << 5 | var4] = -var6 / var7; 1272 this.rainYCoords[var3 << 5 | var4] = var5 / var7; 1273 } 1274 } 1275 } 1276 1277 EntityLiving var41 = this.mc.renderViewEntity; 1278 WorldClient var42 = this.mc.theWorld; 1279 int var43 = MathHelper.floor_double(var41.posX); 1280 int var44 = MathHelper.floor_double(var41.posY); 1281 int var45 = MathHelper.floor_double(var41.posZ); 1282 Tessellator var8 = Tessellator.instance; 1283 GL11.glDisable(GL11.GL_CULL_FACE); 1284 GL11.glNormal3f(0.0F, 1.0F, 0.0F); 1285 GL11.glEnable(GL11.GL_BLEND); 1286 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 1287 GL11.glAlphaFunc(GL11.GL_GREATER, 0.01F); 1288 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/environment/snow.png")); 1289 double var9 = var41.lastTickPosX + (var41.posX - var41.lastTickPosX) * (double)par1; 1290 double var11 = var41.lastTickPosY + (var41.posY - var41.lastTickPosY) * (double)par1; 1291 double var13 = var41.lastTickPosZ + (var41.posZ - var41.lastTickPosZ) * (double)par1; 1292 int var15 = MathHelper.floor_double(var11); 1293 byte var16 = 5; 1294 1295 if (this.mc.gameSettings.fancyGraphics) 1296 { 1297 var16 = 10; 1298 } 1299 1300 boolean var17 = false; 1301 byte var18 = -1; 1302 float var19 = (float)this.rendererUpdateCount + par1; 1303 1304 if (this.mc.gameSettings.fancyGraphics) 1305 { 1306 var16 = 10; 1307 } 1308 1309 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 1310 var17 = false; 1311 1312 for (int var20 = var45 - var16; var20 <= var45 + var16; ++var20) 1313 { 1314 for (int var21 = var43 - var16; var21 <= var43 + var16; ++var21) 1315 { 1316 int var22 = (var20 - var45 + 16) * 32 + var21 - var43 + 16; 1317 float var23 = this.rainXCoords[var22] * 0.5F; 1318 float var24 = this.rainYCoords[var22] * 0.5F; 1319 BiomeGenBase var25 = var42.getBiomeGenForCoords(var21, var20); 1320 1321 if (var25.canSpawnLightningBolt() || var25.getEnableSnow()) 1322 { 1323 int var26 = var42.getPrecipitationHeight(var21, var20); 1324 int var27 = var44 - var16; 1325 int var28 = var44 + var16; 1326 1327 if (var27 < var26) 1328 { 1329 var27 = var26; 1330 } 1331 1332 if (var28 < var26) 1333 { 1334 var28 = var26; 1335 } 1336 1337 float var29 = 1.0F; 1338 int var30 = var26; 1339 1340 if (var26 < var15) 1341 { 1342 var30 = var15; 1343 } 1344 1345 if (var27 != var28) 1346 { 1347 this.random.setSeed((long)(var21 * var21 * 3121 + var21 * 45238971 ^ var20 * var20 * 418711 + var20 * 13761)); 1348 float var31 = var25.getFloatTemperature(); 1349 double var35; 1350 float var32; 1351 1352 if (var42.getWorldChunkManager().getTemperatureAtHeight(var31, var26) >= 0.15F) 1353 { 1354 if (var18 != 0) 1355 { 1356 if (var18 >= 0) 1357 { 1358 var8.draw(); 1359 } 1360 1361 var18 = 0; 1362 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/environment/rain.png")); 1363 var8.startDrawingQuads(); 1364 } 1365 1366 var32 = ((float)(this.rendererUpdateCount + var21 * var21 * 3121 + var21 * 45238971 + var20 * var20 * 418711 + var20 * 13761 & 31) + par1) / 32.0F * (3.0F + this.random.nextFloat()); 1367 double var33 = (double)((float)var21 + 0.5F) - var41.posX; 1368 var35 = (double)((float)var20 + 0.5F) - var41.posZ; 1369 float var37 = MathHelper.sqrt_double(var33 * var33 + var35 * var35) / (float)var16; 1370 float var38 = 1.0F; 1371 var8.setBrightness(var42.getLightBrightnessForSkyBlocks(var21, var30, var20, 0)); 1372 var8.setColorRGBA_F(var38, var38, var38, ((1.0F - var37 * var37) * 0.5F + 0.5F) * var2); 1373 var8.setTranslation(-var9 * 1.0D, -var11 * 1.0D, -var13 * 1.0D); 1374 var8.addVertexWithUV((double)((float)var21 - var23) + 0.5D, (double)var27, (double)((float)var20 - var24) + 0.5D, (double)(0.0F * var29), (double)((float)var27 * var29 / 4.0F + var32 * var29)); 1375 var8.addVertexWithUV((double)((float)var21 + var23) + 0.5D, (double)var27, (double)((float)var20 + var24) + 0.5D, (double)(1.0F * var29), (double)((float)var27 * var29 / 4.0F + var32 * var29)); 1376 var8.addVertexWithUV((double)((float)var21 + var23) + 0.5D, (double)var28, (double)((float)var20 + var24) + 0.5D, (double)(1.0F * var29), (double)((float)var28 * var29 / 4.0F + var32 * var29)); 1377 var8.addVertexWithUV((double)((float)var21 - var23) + 0.5D, (double)var28, (double)((float)var20 - var24) + 0.5D, (double)(0.0F * var29), (double)((float)var28 * var29 / 4.0F + var32 * var29)); 1378 var8.setTranslation(0.0D, 0.0D, 0.0D); 1379 } 1380 else 1381 { 1382 if (var18 != 1) 1383 { 1384 if (var18 >= 0) 1385 { 1386 var8.draw(); 1387 } 1388 1389 var18 = 1; 1390 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/environment/snow.png")); 1391 var8.startDrawingQuads(); 1392 } 1393 1394 var32 = ((float)(this.rendererUpdateCount & 511) + par1) / 512.0F; 1395 float var46 = this.random.nextFloat() + var19 * 0.01F * (float)this.random.nextGaussian(); 1396 float var34 = this.random.nextFloat() + var19 * (float)this.random.nextGaussian() * 0.001F; 1397 var35 = (double)((float)var21 + 0.5F) - var41.posX; 1398 double var47 = (double)((float)var20 + 0.5F) - var41.posZ; 1399 float var39 = MathHelper.sqrt_double(var35 * var35 + var47 * var47) / (float)var16; 1400 float var40 = 1.0F; 1401 var8.setBrightness((var42.getLightBrightnessForSkyBlocks(var21, var30, var20, 0) * 3 + 15728880) / 4); 1402 var8.setColorRGBA_F(var40, var40, var40, ((1.0F - var39 * var39) * 0.3F + 0.5F) * var2); 1403 var8.setTranslation(-var9 * 1.0D, -var11 * 1.0D, -var13 * 1.0D); 1404 var8.addVertexWithUV((double)((float)var21 - var23) + 0.5D, (double)var27, (double)((float)var20 - var24) + 0.5D, (double)(0.0F * var29 + var46), (double)((float)var27 * var29 / 4.0F + var32 * var29 + var34)); 1405 var8.addVertexWithUV((double)((float)var21 + var23) + 0.5D, (double)var27, (double)((float)var20 + var24) + 0.5D, (double)(1.0F * var29 + var46), (double)((float)var27 * var29 / 4.0F + var32 * var29 + var34)); 1406 var8.addVertexWithUV((double)((float)var21 + var23) + 0.5D, (double)var28, (double)((float)var20 + var24) + 0.5D, (double)(1.0F * var29 + var46), (double)((float)var28 * var29 / 4.0F + var32 * var29 + var34)); 1407 var8.addVertexWithUV((double)((float)var21 - var23) + 0.5D, (double)var28, (double)((float)var20 - var24) + 0.5D, (double)(0.0F * var29 + var46), (double)((float)var28 * var29 / 4.0F + var32 * var29 + var34)); 1408 var8.setTranslation(0.0D, 0.0D, 0.0D); 1409 } 1410 } 1411 } 1412 } 1413 } 1414 1415 if (var18 >= 0) 1416 { 1417 var8.draw(); 1418 } 1419 1420 GL11.glEnable(GL11.GL_CULL_FACE); 1421 GL11.glDisable(GL11.GL_BLEND); 1422 GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); 1423 this.disableLightmap((double)par1); 1424 } 1425 } 1426 1427 /** 1428 * Setup orthogonal projection for rendering GUI screen overlays 1429 */ 1430 public void setupOverlayRendering() 1431 { 1432 ScaledResolution var1 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); 1433 GL11.glClear(256); 1434 GL11.glMatrixMode(GL11.GL_PROJECTION); 1435 GL11.glLoadIdentity(); 1436 GL11.glOrtho(0.0D, var1.getScaledWidth_double(), var1.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); 1437 GL11.glMatrixMode(GL11.GL_MODELVIEW); 1438 GL11.glLoadIdentity(); 1439 GL11.glTranslatef(0.0F, 0.0F, -2000.0F); 1440 } 1441 1442 /** 1443 * calculates fog and calls glClearColor 1444 */ 1445 private void updateFogColor(float par1) 1446 { 1447 WorldClient var2 = this.mc.theWorld; 1448 EntityLiving var3 = this.mc.renderViewEntity; 1449 float var4 = 1.0F / (float)(4 - this.mc.gameSettings.renderDistance); 1450 var4 = 1.0F - (float)Math.pow((double)var4, 0.25D); 1451 Vec3 var5 = var2.getSkyColor(this.mc.renderViewEntity, par1); 1452 float var6 = (float)var5.xCoord; 1453 float var7 = (float)var5.yCoord; 1454 float var8 = (float)var5.zCoord; 1455 Vec3 var9 = var2.getFogColor(par1); 1456 this.fogColorRed = (float)var9.xCoord; 1457 this.fogColorGreen = (float)var9.yCoord; 1458 this.fogColorBlue = (float)var9.zCoord; 1459 float var11; 1460 1461 if (this.mc.gameSettings.renderDistance < 2) 1462 { 1463 Vec3 var10 = MathHelper.sin(var2.getCelestialAngleRadians(par1)) > 0.0F ? Vec3.getVec3Pool().getVecFromPool(-1.0D, 0.0D, 0.0D) : Vec3.getVec3Pool().getVecFromPool(1.0D, 0.0D, 0.0D); 1464 var11 = (float)var3.getLook(par1).dotProduct(var10); 1465 1466 if (var11 < 0.0F) 1467 { 1468 var11 = 0.0F; 1469 } 1470 1471 if (var11 > 0.0F) 1472 { 1473 float[] var12 = var2.provider.calcSunriseSunsetColors(var2.getCelestialAngle(par1), par1); 1474 1475 if (var12 != null) 1476 { 1477 var11 *= var12[3]; 1478 this.fogColorRed = this.fogColorRed * (1.0F - var11) + var12[0] * var11; 1479 this.fogColorGreen = this.fogColorGreen * (1.0F - var11) + var12[1] * var11; 1480 this.fogColorBlue = this.fogColorBlue * (1.0F - var11) + var12[2] * var11; 1481 } 1482 } 1483 } 1484 1485 this.fogColorRed += (var6 - this.fogColorRed) * var4; 1486 this.fogColorGreen += (var7 - this.fogColorGreen) * var4; 1487 this.fogColorBlue += (var8 - this.fogColorBlue) * var4; 1488 float var19 = var2.getRainStrength(par1); 1489 float var20; 1490 1491 if (var19 > 0.0F) 1492 { 1493 var11 = 1.0F - var19 * 0.5F; 1494 var20 = 1.0F - var19 * 0.4F; 1495 this.fogColorRed *= var11; 1496 this.fogColorGreen *= var11; 1497 this.fogColorBlue *= var20; 1498 } 1499 1500 var11 = var2.getWeightedThunderStrength(par1); 1501 1502 if (var11 > 0.0F) 1503 { 1504 var20 = 1.0F - var11 * 0.5F; 1505 this.fogColorRed *= var20; 1506 this.fogColorGreen *= var20; 1507 this.fogColorBlue *= var20; 1508 } 1509 1510 int var21 = ActiveRenderInfo.getBlockIdAtEntityViewpoint(this.mc.theWorld, var3, par1); 1511 1512 if (this.cloudFog) 1513 { 1514 Vec3 var13 = var2.drawClouds(par1); 1515 this.fogColorRed = (float)var13.xCoord; 1516 this.fogColorGreen = (float)var13.yCoord; 1517 this.fogColorBlue = (float)var13.zCoord; 1518 } 1519 else if (var21 != 0 && Block.blocksList[var21].blockMaterial == Material.water) 1520 { 1521 this.fogColorRed = 0.02F; 1522 this.fogColorGreen = 0.02F; 1523 this.fogColorBlue = 0.2F; 1524 } 1525 else if (var21 != 0 && Block.blocksList[var21].blockMaterial == Material.lava) 1526 { 1527 this.fogColorRed = 0.6F; 1528 this.fogColorGreen = 0.1F; 1529 this.fogColorBlue = 0.0F; 1530 } 1531 1532 float var22 = this.fogColor2 + (this.fogColor1 - this.fogColor2) * par1; 1533 this.fogColorRed *= var22; 1534 this.fogColorGreen *= var22; 1535 this.fogColorBlue *= var22; 1536 double var14 = (var3.lastTickPosY + (var3.posY - var3.lastTickPosY) * (double)par1) * var2.provider.getVoidFogYFactor(); 1537 1538 if (var3.isPotionActive(Potion.blindness)) 1539 { 1540 int var16 = var3.getActivePotionEffect(Potion.blindness).getDuration(); 1541 1542 if (var16 < 20) 1543 { 1544 var14 *= (double)(1.0F - (float)var16 / 20.0F); 1545 } 1546 else 1547 { 1548 var14 = 0.0D; 1549 } 1550 } 1551 1552 if (var14 < 1.0D) 1553 { 1554 if (var14 < 0.0D) 1555 { 1556 var14 = 0.0D; 1557 } 1558 1559 var14 *= var14; 1560 this.fogColorRed = (float)((double)this.fogColorRed * var14); 1561 this.fogColorGreen = (float)((double)this.fogColorGreen * var14); 1562 this.fogColorBlue = (float)((double)this.fogColorBlue * var14); 1563 } 1564 1565 if (this.mc.gameSettings.anaglyph) 1566 { 1567 float var23 = (this.fogColorRed * 30.0F + this.fogColorGreen * 59.0F + this.fogColorBlue * 11.0F) / 100.0F; 1568 float var17 = (this.fogColorRed * 30.0F + this.fogColorGreen * 70.0F) / 100.0F; 1569 float var18 = (this.fogColorRed * 30.0F + this.fogColorBlue * 70.0F) / 100.0F; 1570 this.fogColorRed = var23; 1571 this.fogColorGreen = var17; 1572 this.fogColorBlue = var18; 1573 } 1574 1575 GL11.glClearColor(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 0.0F); 1576 } 1577 1578 /** 1579 * Sets up the fog to be rendered. If the arg passed in is -1 the fog starts at 0 and goes to 80% of far plane 1580 * distance and is used for sky rendering. 1581 */ 1582 private void setupFog(int par1, float par2) 1583 { 1584 EntityLiving var3 = this.mc.renderViewEntity; 1585 boolean var4 = false; 1586 1587 if (var3 instanceof EntityPlayer) 1588 { 1589 var4 = ((EntityPlayer)var3).capabilities.isCreativeMode; 1590 } 1591 1592 if (par1 == 999) 1593 { 1594 GL11.glFog(GL11.GL_FOG_COLOR, this.setFogColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); 1595 GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); 1596 GL11.glFogf(GL11.GL_FOG_START, 0.0F); 1597 GL11.glFogf(GL11.GL_FOG_END, 8.0F); 1598 1599 if (GLContext.getCapabilities().GL_NV_fog_distance) 1600 { 1601 GL11.glFogi(34138, 34139); 1602 } 1603 1604 GL11.glFogf(GL11.GL_FOG_START, 0.0F); 1605 } 1606 else 1607 { 1608 GL11.glFog(GL11.GL_FOG_COLOR, this.setFogColorBuffer(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 1.0F)); 1609 GL11.glNormal3f(0.0F, -1.0F, 0.0F); 1610 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 1611 int var5 = ActiveRenderInfo.getBlockIdAtEntityViewpoint(this.mc.theWorld, var3, par2); 1612 float var6; 1613 1614 if (var3.isPotionActive(Potion.blindness)) 1615 { 1616 var6 = 5.0F; 1617 int var7 = var3.getActivePotionEffect(Potion.blindness).getDuration(); 1618 1619 if (var7 < 20) 1620 { 1621 var6 = 5.0F + (this.farPlaneDistance - 5.0F) * (1.0F - (float)var7 / 20.0F); 1622 } 1623 1624 GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); 1625 1626 if (par1 < 0) 1627 { 1628 GL11.glFogf(GL11.GL_FOG_START, 0.0F); 1629 GL11.glFogf(GL11.GL_FOG_END, var6 * 0.8F); 1630 } 1631 else 1632 { 1633 GL11.glFogf(GL11.GL_FOG_START, var6 * 0.25F); 1634 GL11.glFogf(GL11.GL_FOG_END, var6); 1635 } 1636 1637 if (GLContext.getCapabilities().GL_NV_fog_distance) 1638 { 1639 GL11.glFogi(34138, 34139); 1640 } 1641 } 1642 else 1643 { 1644 float var8; 1645 float var9; 1646 float var10; 1647 float var11; 1648 float var12; 1649 1650 if (this.cloudFog) 1651 { 1652 GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); 1653 GL11.glFogf(GL11.GL_FOG_DENSITY, 0.1F); 1654 var6 = 1.0F; 1655 var12 = 1.0F; 1656 var8 = 1.0F; 1657 1658 if (this.mc.gameSettings.anaglyph) 1659 { 1660 var9 = (var6 * 30.0F + var12 * 59.0F + var8 * 11.0F) / 100.0F; 1661 var10 = (var6 * 30.0F + var12 * 70.0F) / 100.0F; 1662 var11 = (var6 * 30.0F + var8 * 70.0F) / 100.0F; 1663 } 1664 } 1665 else if (var5 > 0 && Block.blocksList[var5].blockMaterial == Material.water) 1666 { 1667 GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); 1668 1669 if (var3.isPotionActive(Potion.waterBreathing)) 1670 { 1671 GL11.glFogf(GL11.GL_FOG_DENSITY, 0.05F); 1672 } 1673 else 1674 { 1675 GL11.glFogf(GL11.GL_FOG_DENSITY, 0.1F); 1676 } 1677 1678 var6 = 0.4F; 1679 var12 = 0.4F; 1680 var8 = 0.9F; 1681 1682 if (this.mc.gameSettings.anaglyph) 1683 { 1684 var9 = (var6 * 30.0F + var12 * 59.0F + var8 * 11.0F) / 100.0F; 1685 var10 = (var6 * 30.0F + var12 * 70.0F) / 100.0F; 1686 var11 = (var6 * 30.0F + var8 * 70.0F) / 100.0F; 1687 } 1688 } 1689 else if (var5 > 0 && Block.blocksList[var5].blockMaterial == Material.lava) 1690 { 1691 GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); 1692 GL11.glFogf(GL11.GL_FOG_DENSITY, 2.0F); 1693 var6 = 0.4F; 1694 var12 = 0.3F; 1695 var8 = 0.3F; 1696 1697 if (this.mc.gameSettings.anaglyph) 1698 { 1699 var9 = (var6 * 30.0F + var12 * 59.0F + var8 * 11.0F) / 100.0F; 1700 var10 = (var6 * 30.0F + var12 * 70.0F) / 100.0F; 1701 var11 = (var6 * 30.0F + var8 * 70.0F) / 100.0F; 1702 } 1703 } 1704 else 1705 { 1706 var6 = this.farPlaneDistance; 1707 1708 if (this.mc.theWorld.provider.getWorldHasVoidParticles() && !var4) 1709 { 1710 double var13 = (double)((var3.getBrightnessForRender(par2) & 15728640) >> 20) / 16.0D + (var3.lastTickPosY + (var3.posY - var3.lastTickPosY) * (double)par2 + 4.0D) / 32.0D; 1711 1712 if (var13 < 1.0D) 1713 { 1714 if (var13 < 0.0D) 1715 { 1716 var13 = 0.0D; 1717 } 1718 1719 var13 *= var13; 1720 var9 = 100.0F * (float)var13; 1721 1722 if (var9 < 5.0F) 1723 { 1724 var9 = 5.0F; 1725 } 1726 1727 if (var6 > var9) 1728 { 1729 var6 = var9; 1730 } 1731 } 1732 } 1733 1734 GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); 1735 1736 if (par1 < 0) 1737 { 1738 GL11.glFogf(GL11.GL_FOG_START, 0.0F); 1739 GL11.glFogf(GL11.GL_FOG_END, var6 * 0.8F); 1740 } 1741 else 1742 { 1743 GL11.glFogf(GL11.GL_FOG_START, var6 * 0.25F); 1744 GL11.glFogf(GL11.GL_FOG_END, var6); 1745 } 1746 1747 if (GLContext.getCapabilities().GL_NV_fog_distance) 1748 { 1749 GL11.glFogi(34138, 34139); 1750 } 1751 1752 if (this.mc.theWorld.provider.doesXZShowFog((int)var3.posX, (int)var3.posZ)) 1753 { 1754 GL11.glFogf(GL11.GL_FOG_START, var6 * 0.05F); 1755 GL11.glFogf(GL11.GL_FOG_END, Math.min(var6, 192.0F) * 0.5F); 1756 } 1757 } 1758 } 1759 1760 GL11.glEnable(GL11.GL_COLOR_MATERIAL); 1761 GL11.glColorMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT); 1762 } 1763 } 1764 1765 /** 1766 * Update and return fogColorBuffer with the RGBA values passed as arguments 1767 */ 1768 private FloatBuffer setFogColorBuffer(float par1, float par2, float par3, float par4) 1769 { 1770 this.fogColorBuffer.clear(); 1771 this.fogColorBuffer.put(par1).put(par2).put(par3).put(par4); 1772 this.fogColorBuffer.flip(); 1773 return this.fogColorBuffer; 1774 } 1775 1776 public static int func_78465_a(int par0) 1777 { 1778 short var1 = 200; 1779 1780 if (par0 == 1) 1781 { 1782 var1 = 120; 1783 } 1784 1785 if (par0 == 2) 1786 { 1787 var1 = 35; 1788 } 1789 1790 return var1; 1791 } 1792 }