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