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 import java.util.Random; 007 008 @SideOnly(Side.CLIENT) 009 public class TexturePortalFX extends FMLTextureFX 010 { 011 /** Portal tick counter */ 012 private int portalTickCounter = 0; 013 014 /** Portal texture data */ 015 private byte[][] portalTextureData; 016 017 public TexturePortalFX() 018 { 019 super(Block.portal.blockIndexInTexture); 020 setup(); 021 } 022 023 @Override 024 public void setup() 025 { 026 super.setup(); 027 portalTextureData = new byte[32][tileSizeSquare << 4]; 028 Random var1 = new Random(100L); 029 030 for (int var2 = 0; var2 < 32; ++var2) 031 { 032 for (int var3 = 0; var3 < tileSizeBase; ++var3) 033 { 034 for (int var4 = 0; var4 < tileSizeBase; ++var4) 035 { 036 float var5 = 0.0F; 037 int var6; 038 039 for (var6 = 0; var6 < 2; ++var6) 040 { 041 float var7 = (float)(var6 * tileSizeBase) * 0.5F; 042 float var8 = (float)(var6 * tileSizeBase) * 0.5F; 043 float var9 = ((float)var3 - var7) / (float)tileSizeBase * 2.0F; 044 float var10 = ((float)var4 - var8) / (float)tileSizeBase * 2.0F; 045 046 if (var9 < -1.0F) 047 { 048 var9 += 2.0F; 049 } 050 051 if (var9 >= 1.0F) 052 { 053 var9 -= 2.0F; 054 } 055 056 if (var10 < -1.0F) 057 { 058 var10 += 2.0F; 059 } 060 061 if (var10 >= 1.0F) 062 { 063 var10 -= 2.0F; 064 } 065 066 float var11 = var9 * var9 + var10 * var10; 067 float var12 = (float)Math.atan2((double)var10, (double)var9) + ((float)var2 / 32.0F * (float)Math.PI * 2.0F - var11 * 10.0F + (float)(var6 * 2)) * (float)(var6 * 2 - 1); 068 var12 = (MathHelper.sin(var12) + 1.0F) / 2.0F; 069 var12 /= var11 + 1.0F; 070 var5 += var12 * 0.5F; 071 } 072 073 var5 += var1.nextFloat() * 0.1F; 074 var6 = (int)(var5 * 100.0F + 155.0F); 075 int var13 = (int)(var5 * var5 * 200.0F + 55.0F); 076 int var14 = (int)(var5 * var5 * var5 * var5 * 255.0F); 077 int var15 = (int)(var5 * 100.0F + 155.0F); 078 int var16 = var4 * tileSizeBase + var3; 079 this.portalTextureData[var2][var16 * 4 + 0] = (byte)var13; 080 this.portalTextureData[var2][var16 * 4 + 1] = (byte)var14; 081 this.portalTextureData[var2][var16 * 4 + 2] = (byte)var6; 082 this.portalTextureData[var2][var16 * 4 + 3] = (byte)var15; 083 } 084 } 085 } 086 } 087 088 public void onTick() 089 { 090 ++this.portalTickCounter; 091 byte[] var1 = this.portalTextureData[this.portalTickCounter & 31]; 092 093 for (int var2 = 0; var2 < tileSizeSquare; ++var2) 094 { 095 int var3 = var1[var2 * 4 + 0] & 255; 096 int var4 = var1[var2 * 4 + 1] & 255; 097 int var5 = var1[var2 * 4 + 2] & 255; 098 int var6 = var1[var2 * 4 + 3] & 255; 099 100 if (this.anaglyphEnabled) 101 { 102 int var7 = (var3 * 30 + var4 * 59 + var5 * 11) / 100; 103 int var8 = (var3 * 30 + var4 * 70) / 100; 104 int var9 = (var3 * 30 + var5 * 70) / 100; 105 var3 = var7; 106 var4 = var8; 107 var5 = var9; 108 } 109 110 this.imageData[var2 * 4 + 0] = (byte)var3; 111 this.imageData[var2 * 4 + 1] = (byte)var4; 112 this.imageData[var2 * 4 + 2] = (byte)var5; 113 this.imageData[var2 * 4 + 3] = (byte)var6; 114 } 115 } 116 }