001 package net.minecraft.client.renderer.texturefx; 002 003 import cpw.mods.fml.client.FMLTextureFX; 004 import cpw.mods.fml.relauncher.Side; 005 import cpw.mods.fml.relauncher.SideOnly; 006 import net.minecraft.block.Block; 007 008 @SideOnly(Side.CLIENT) 009 public class TextureFlamesFX extends FMLTextureFX 010 { 011 protected float[] field_76869_g = new float[320]; 012 protected float[] field_76870_h = new float[320]; 013 private int fireTileSize = 20; 014 private int fireGridSize = 320; 015 016 public TextureFlamesFX(int par1) 017 { 018 super(Block.fire.blockIndexInTexture + par1 * 16); 019 setup(); 020 } 021 022 @Override 023 public void setup() 024 { 025 super.setup(); 026 fireTileSize = tileSizeBase + (tileSizeBase >> 2); 027 fireGridSize = fireTileSize * tileSizeBase; 028 field_76869_g = new float[fireGridSize]; 029 field_76870_h = new float[fireGridSize]; 030 } 031 032 public void onTick() 033 { 034 int var3; 035 float var4; 036 int var6; 037 float fireFactor1 = 3.0F + (float)(tileSizeBase >> 4); 038 float fireFactor2 = 1.01F + (0.8F / tileSizeBase); 039 040 for (int var1 = 0; var1 < tileSizeBase; ++var1) 041 { 042 for (int var2 = 0; var2 < fireTileSize; ++var2) 043 { 044 var3 = fireTileSize - (tileSizeBase >> 3); 045 var4 = this.field_76869_g[var1 + (var2 + 1) % fireTileSize * tileSizeBase] * (float)var3; 046 047 for (int var5 = var1 - 1; var5 <= var1 + 1; ++var5) 048 { 049 for (var6 = var2; var6 <= var2 + 1; ++var6) 050 { 051 if (var5 >= 0 && var6 >= 0 && var5 < tileSizeBase && var6 < fireTileSize) 052 { 053 var4 += this.field_76869_g[var5 + var6 * tileSizeBase]; 054 } 055 056 ++var3; 057 } 058 } 059 060 this.field_76870_h[var1 + var2 * tileSizeBase] = var4 / ((float)var3 * fireFactor2); 061 062 if (var2 >= fireTileSize - (tileSizeBase >> 4)) 063 { 064 this.field_76870_h[var1 + var2 * tileSizeBase] = (float)(Math.random() * Math.random() * Math.random() * fireFactor1 + Math.random() * 0.1F + 0.2F); 065 } 066 } 067 } 068 069 float[] var13 = this.field_76870_h; 070 this.field_76870_h = this.field_76869_g; 071 this.field_76869_g = var13; 072 073 for (var3 = 0; var3 < tileSizeSquare; ++var3) 074 { 075 var4 = this.field_76869_g[var3] * 1.8F; 076 077 if (var4 > 1.0F) 078 { 079 var4 = 1.0F; 080 } 081 082 if (var4 < 0.0F) 083 { 084 var4 = 0.0F; 085 } 086 087 var6 = (int)(var4 * 155.0F + 100.0F); 088 int var7 = (int)(var4 * var4 * 255.0F); 089 int var8 = (int)(var4 * var4 * var4 * var4 * var4 * var4 * var4 * var4 * var4 * var4 * 255.0F); 090 short var9 = 255; 091 092 if (var4 < 0.5F) 093 { 094 var9 = 0; 095 } 096 097 float var14 = (var4 - 0.5F) * 2.0F; 098 099 if (this.anaglyphEnabled) 100 { 101 int var10 = (var6 * 30 + var7 * 59 + var8 * 11) / 100; 102 int var11 = (var6 * 30 + var7 * 70) / 100; 103 int var12 = (var6 * 30 + var8 * 70) / 100; 104 var6 = var10; 105 var7 = var11; 106 var8 = var12; 107 } 108 109 this.imageData[var3 * 4 + 0] = (byte)var6; 110 this.imageData[var3 * 4 + 1] = (byte)var7; 111 this.imageData[var3 * 4 + 2] = (byte)var8; 112 this.imageData[var3 * 4 + 3] = (byte)var9; 113 } 114 } 115 }