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