001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005 import java.util.Random;
006 import org.lwjgl.opengl.GL11;
007
008 @SideOnly(Side.CLIENT)
009 public class RenderLightningBolt extends Render
010 {
011 /**
012 * Actually renders the lightning bolt. This method is called through the doRender method.
013 */
014 public void doRenderLightningBolt(EntityLightningBolt par1EntityLightningBolt, double par2, double par4, double par6, float par8, float par9)
015 {
016 Tessellator var10 = Tessellator.instance;
017 GL11.glDisable(GL11.GL_TEXTURE_2D);
018 GL11.glDisable(GL11.GL_LIGHTING);
019 GL11.glEnable(GL11.GL_BLEND);
020 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
021 double[] var11 = new double[8];
022 double[] var12 = new double[8];
023 double var13 = 0.0D;
024 double var15 = 0.0D;
025 Random var17 = new Random(par1EntityLightningBolt.boltVertex);
026
027 for (int var18 = 7; var18 >= 0; --var18)
028 {
029 var11[var18] = var13;
030 var12[var18] = var15;
031 var13 += (double)(var17.nextInt(11) - 5);
032 var15 += (double)(var17.nextInt(11) - 5);
033 }
034
035 for (int var45 = 0; var45 < 4; ++var45)
036 {
037 Random var46 = new Random(par1EntityLightningBolt.boltVertex);
038
039 for (int var19 = 0; var19 < 3; ++var19)
040 {
041 int var20 = 7;
042 int var21 = 0;
043
044 if (var19 > 0)
045 {
046 var20 = 7 - var19;
047 }
048
049 if (var19 > 0)
050 {
051 var21 = var20 - 2;
052 }
053
054 double var22 = var11[var20] - var13;
055 double var24 = var12[var20] - var15;
056
057 for (int var26 = var20; var26 >= var21; --var26)
058 {
059 double var27 = var22;
060 double var29 = var24;
061
062 if (var19 == 0)
063 {
064 var22 += (double)(var46.nextInt(11) - 5);
065 var24 += (double)(var46.nextInt(11) - 5);
066 }
067 else
068 {
069 var22 += (double)(var46.nextInt(31) - 15);
070 var24 += (double)(var46.nextInt(31) - 15);
071 }
072
073 var10.startDrawing(5);
074 float var31 = 0.5F;
075 var10.setColorRGBA_F(0.9F * var31, 0.9F * var31, 1.0F * var31, 0.3F);
076 double var32 = 0.1D + (double)var45 * 0.2D;
077
078 if (var19 == 0)
079 {
080 var32 *= (double)var26 * 0.1D + 1.0D;
081 }
082
083 double var34 = 0.1D + (double)var45 * 0.2D;
084
085 if (var19 == 0)
086 {
087 var34 *= (double)(var26 - 1) * 0.1D + 1.0D;
088 }
089
090 for (int var36 = 0; var36 < 5; ++var36)
091 {
092 double var37 = par2 + 0.5D - var32;
093 double var39 = par6 + 0.5D - var32;
094
095 if (var36 == 1 || var36 == 2)
096 {
097 var37 += var32 * 2.0D;
098 }
099
100 if (var36 == 2 || var36 == 3)
101 {
102 var39 += var32 * 2.0D;
103 }
104
105 double var41 = par2 + 0.5D - var34;
106 double var43 = par6 + 0.5D - var34;
107
108 if (var36 == 1 || var36 == 2)
109 {
110 var41 += var34 * 2.0D;
111 }
112
113 if (var36 == 2 || var36 == 3)
114 {
115 var43 += var34 * 2.0D;
116 }
117
118 var10.addVertex(var41 + var22, par4 + (double)(var26 * 16), var43 + var24);
119 var10.addVertex(var37 + var27, par4 + (double)((var26 + 1) * 16), var39 + var29);
120 }
121
122 var10.draw();
123 }
124 }
125 }
126
127 GL11.glDisable(GL11.GL_BLEND);
128 GL11.glEnable(GL11.GL_LIGHTING);
129 GL11.glEnable(GL11.GL_TEXTURE_2D);
130 }
131
132 /**
133 * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
134 * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
135 * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
136 * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
137 */
138 public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
139 {
140 this.doRenderLightningBolt((EntityLightningBolt)par1Entity, par2, par4, par6, par8, par9);
141 }
142 }