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 TextureWaterFX extends FMLTextureFX
009 {
010 /** red RGB value for water texture */
011 protected float[] red = new float[256];
012
013 /** green RGB value for water texture */
014 protected float[] green = new float[256];
015
016 /** blue RGB value for water texture */
017 protected float[] blue = new float[256];
018
019 /** alpha RGB value for water texture */
020 protected float[] alpha = new float[256];
021 private int tickCounter = 0;
022
023 public TextureWaterFX()
024 {
025 super(Block.waterMoving.blockIndexInTexture);
026 setup();
027 }
028
029 @Override
030 public void setup()
031 {
032 super.setup();
033 red = new float[tileSizeSquare];
034 green = new float[tileSizeSquare];
035 blue = new float[tileSizeSquare];
036 alpha = new float[tileSizeSquare];
037 tickCounter = 0;
038 }
039
040 public void onTick()
041 {
042 ++this.tickCounter;
043 int var1;
044 int var2;
045 float var3;
046 int var5;
047 int var6;
048
049 for (var1 = 0; var1 < tileSizeBase; ++var1)
050 {
051 for (var2 = 0; var2 < tileSizeBase; ++var2)
052 {
053 var3 = 0.0F;
054
055 for (int var4 = var1 - 1; var4 <= var1 + 1; ++var4)
056 {
057 var5 = var4 & tileSizeMask;
058 var6 = var2 & tileSizeMask;
059 var3 += this.red[var5 + var6 * tileSizeBase];
060 }
061
062 this.green[var1 + var2 * tileSizeBase] = var3 / 3.3F + this.blue[var1 + var2 * tileSizeBase] * 0.8F;
063 }
064 }
065
066 for (var1 = 0; var1 < tileSizeBase; ++var1)
067 {
068 for (var2 = 0; var2 < tileSizeBase; ++var2)
069 {
070 this.blue[var1 + var2 * tileSizeBase] += this.alpha[var1 + var2 * tileSizeBase] * 0.05F;
071
072 if (this.blue[var1 + var2 * tileSizeBase] < 0.0F)
073 {
074 this.blue[var1 + var2 * tileSizeBase] = 0.0F;
075 }
076
077 this.alpha[var1 + var2 * tileSizeBase] -= 0.1F;
078
079 if (Math.random() < 0.05D)
080 {
081 this.alpha[var1 + var2 * tileSizeBase] = 0.5F;
082 }
083 }
084 }
085
086 float[] var12 = this.green;
087 this.green = this.red;
088 this.red = var12;
089
090 for (var2 = 0; var2 < tileSizeSquare; ++var2)
091 {
092 var3 = this.red[var2];
093
094 if (var3 > 1.0F)
095 {
096 var3 = 1.0F;
097 }
098
099 if (var3 < 0.0F)
100 {
101 var3 = 0.0F;
102 }
103
104 float var13 = var3 * var3;
105 var5 = (int)(32.0F + var13 * 32.0F);
106 var6 = (int)(50.0F + var13 * 64.0F);
107 int var7 = 255;
108 int var8 = (int)(146.0F + var13 * 50.0F);
109
110 if (this.anaglyphEnabled)
111 {
112 int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100;
113 int var10 = (var5 * 30 + var6 * 70) / 100;
114 int var11 = (var5 * 30 + var7 * 70) / 100;
115 var5 = var9;
116 var6 = var10;
117 var7 = var11;
118 }
119
120 this.imageData[var2 * 4 + 0] = (byte)var5;
121 this.imageData[var2 * 4 + 1] = (byte)var6;
122 this.imageData[var2 * 4 + 2] = (byte)var7;
123 this.imageData[var2 * 4 + 3] = (byte)var8;
124 }
125 }
126 }