icbm/src/main/java/icbm/zhapin/render/RZhaPin.java

194 lines
7.4 KiB
Java

package icbm.zhapin.render;
import java.util.Random;
import calclavia.lib.render.CalclaviaRenderHelper;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import icbm.core.di.MICBM;
import icbm.zhapin.zhapin.EExplosion;
import icbm.zhapin.zhapin.ZhaPin;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.Sphere;
@SideOnly(Side.CLIENT)
public class RZhaPin extends Render {
public Random random;
public RZhaPin() {
this.random = new Random();
}
public void doRender(
final Entity entity,
final double x,
final double y,
final double z,
final float par8,
final float par9
) {
final EExplosion eZhaPin = (EExplosion) entity;
if (eZhaPin.haoMa == ZhaPin.redMatter.getID()) {
final Tessellator tessellator = Tessellator.instance;
GL11.glPushMatrix();
GL11.glTranslatef((float) x, (float) y, (float) z);
CalclaviaRenderHelper.enableBlending();
CalclaviaRenderHelper.disableLighting();
GL11.glColor4f(0.0f, 0.0f, 0.0f, 0.9f);
final Sphere sphere = new Sphere();
sphere.draw(5.0f, 32, 32);
CalclaviaRenderHelper.enableLighting();
CalclaviaRenderHelper.disableBlending();
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glDepthMask(false);
CalclaviaRenderHelper.enableBlending();
CalclaviaRenderHelper.disableLighting();
GL11.glTranslated(x, y, z);
GL11.glRotatef((float) entity.ticksExisted, 0.0f, 1.0f, 0.0f);
final float size = 10.0f;
final int textureSize = 50;
final float size2 = size * 5.0f;
final float float_sizeMinus0_01 = textureSize - 0.01f;
final float x2 = (textureSize + 0.0f) / size2;
final float x3 = (textureSize + float_sizeMinus0_01) / size2;
final float x4 = (textureSize + 0.0f) / size2;
final float x5 = (textureSize + float_sizeMinus0_01) / size2;
Minecraft.getMinecraft().renderEngine.bindTexture(
new ResourceLocation("icbm", "textures/blackhole.png")
);
tessellator.startDrawingQuads();
tessellator.setBrightness(240);
tessellator.setColorRGBA_F(1.0f, 1.0f, 1.0f, 1.0f);
tessellator.addVertexWithUV(
(double) (-size), 0.0, (double) (-size), (double) x3, (double) x5
);
tessellator.addVertexWithUV(
(double) (-size), 0.0, (double) size, (double) x3, (double) x4
);
tessellator.addVertexWithUV(
(double) size, 0.0, (double) size, (double) x2, (double) x4
);
tessellator.addVertexWithUV(
(double) size, 0.0, (double) (-size), (double) x2, (double) x5
);
tessellator.draw();
CalclaviaRenderHelper.enableLighting();
CalclaviaRenderHelper.disableBlending();
GL11.glDepthMask(true);
GL11.glPopMatrix();
float par10;
for (par10 = (float) entity.ticksExisted; par10 > 200.0f; par10 -= 100.0f) {}
RenderHelper.disableStandardItemLighting();
final float var41 = (5.0f + par10) / 200.0f;
float var42 = 0.0f;
if (var41 > 0.8f) {
var42 = (var41 - 0.8f) / 0.2f;
}
final Random rand = new Random(432L);
GL11.glPushMatrix();
GL11.glTranslatef((float) x, (float) y, (float) z);
GL11.glDisable(3553);
GL11.glShadeModel(7425);
GL11.glEnable(3042);
GL11.glBlendFunc(770, 1);
GL11.glDisable(3008);
GL11.glEnable(2884);
GL11.glDepthMask(false);
GL11.glPushMatrix();
GL11.glTranslatef(0.0f, -1.0f, -2.0f);
for (int i1 = 0; i1 < (var41 + var41 * var41) / 2.0f * 60.0f; ++i1) {
GL11.glRotatef(rand.nextFloat() * 360.0f, 1.0f, 0.0f, 0.0f);
GL11.glRotatef(rand.nextFloat() * 360.0f, 0.0f, 1.0f, 0.0f);
GL11.glRotatef(rand.nextFloat() * 360.0f, 0.0f, 0.0f, 1.0f);
GL11.glRotatef(rand.nextFloat() * 360.0f, 1.0f, 0.0f, 0.0f);
GL11.glRotatef(rand.nextFloat() * 360.0f, 0.0f, 1.0f, 0.0f);
GL11.glRotatef(
rand.nextFloat() * 360.0f + var41 * 90.0f, 0.0f, 0.0f, 1.0f
);
tessellator.startDrawing(6);
final float var43 = rand.nextFloat() * 20.0f + 5.0f + var42 * 10.0f;
final float var44 = rand.nextFloat() * 2.0f + 1.0f + var42 * 2.0f;
tessellator.setColorRGBA_I(16777215, (int) (255.0f * (1.0f - var42)));
tessellator.addVertex(0.0, 0.0, 0.0);
tessellator.setColorRGBA_I(0, 0);
tessellator.addVertex(
-0.866 * var44, (double) var43, (double) (-0.5f * var44)
);
tessellator.addVertex(
0.866 * var44, (double) var43, (double) (-0.5f * var44)
);
tessellator.addVertex(0.0, (double) var43, (double) (1.0f * var44));
tessellator.addVertex(
-0.866 * var44, (double) var43, (double) (-0.5f * var44)
);
tessellator.draw();
}
GL11.glPopMatrix();
GL11.glDepthMask(true);
GL11.glDisable(2884);
GL11.glDisable(3042);
GL11.glShadeModel(7424);
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
GL11.glEnable(3553);
GL11.glEnable(3008);
RenderHelper.enableStandardItemLighting();
GL11.glPopMatrix();
} else {
final Object[] data = ZhaPin.list[eZhaPin.haoMa].getRenderData();
if (data != null) {
GL11.glPushMatrix();
GL11.glTranslatef((float) x, (float) y + 1.0f, (float) z);
GL11.glRotatef(eZhaPin.rotationPitch, 0.0f, 0.0f, 1.0f);
this.bindTexture((ResourceLocation) data[1]);
((MICBM) data[0])
.render(
(Entity) eZhaPin,
(float) x,
(float) y,
(float) z,
par8,
par9,
0.0625f
);
GL11.glPopMatrix();
}
}
}
public void drawCircle(
final double x, final double y, final double radius, final double accuracy
) {
GL11.glDisable(3553);
final double da = Math.min(2.0 * Math.asin(1.0 / radius) / accuracy, 10000.0);
GL11.glBegin(6);
GL11.glVertex2d(x, y);
for (double a = 0.0; a <= 6.283185307179586; a += da) {
GL11.glVertex2d(x + Math.cos(a) * radius, y + Math.sin(a) * radius);
}
GL11.glVertex2d(x + radius, y);
GL11.glEnd();
}
@Override
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
return null;
}
}