2022-04-03 19:56:34 +02:00

146 lines
5.0 KiB
Java

package com.hbm.particle;
import java.util.Random;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.World;
@SideOnly(Side.CLIENT)
public class ParticleAmatFlash extends EntityFX {
public ParticleAmatFlash(World world, double x, double y, double z, float scale) {
super(world, x, y, z);
this.particleMaxAge = 10;
this.particleScale = scale;
}
public int getFXLayer() {
return 3;
}
public void renderParticle(Tessellator tess, float interp, float x, float y, float z, float tx, float tz) {
float pX = (float) ((this.prevPosX + (this.posX - this.prevPosX) * (double) interp - interpPosX));
float pY = (float) ((this.prevPosY + (this.posY - this.prevPosY) * (double) interp - interpPosY));
float pZ = (float) ((this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ));
GL11.glPushMatrix();
GL11.glTranslatef(pX, pY, pZ);
GL11.glScalef(0.2F * particleScale, 0.2F * particleScale, 0.2F * particleScale);
double intensity = (double) (this.particleAge + interp) / (double) this.particleMaxAge;
double inverse = 1.0D - intensity;
Tessellator tessellator = Tessellator.instance;
RenderHelper.disableStandardItemLighting();
Random random = new Random(432L);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glDepthMask(false);
float scale = 0.5F;
for(int i = 0; i < 100; i++) {
GL11.glRotatef(random.nextFloat() * 360.0F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(random.nextFloat() * 360.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(random.nextFloat() * 360.0F, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(random.nextFloat() * 360.0F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(random.nextFloat() * 360.0F, 0.0F, 1.0F, 0.0F);
float vert1 = (random.nextFloat() * 20.0F + 5.0F + 1 * 10.0F) * (float) (intensity * scale);
float vert2 = (random.nextFloat() * 2.0F + 1.0F + 1 * 2.0F) * (float) (intensity * scale);
tessellator.startDrawing(6);
tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, (float) inverse);
tessellator.addVertex(0.0D, 0.0D, 0.0D);
tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 0.0F);
tessellator.addVertex(-0.866D * vert2, vert1, -0.5F * vert2);
tessellator.addVertex(0.866D * vert2, vert1, -0.5F * vert2);
tessellator.addVertex(0.0D, vert1, 1.0F * vert2);
tessellator.addVertex(-0.866D * vert2, vert1, -0.5F * vert2);
tessellator.draw();
}
GL11.glPopMatrix();
GL11.glDepthMask(true);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_BLEND);
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_ALPHA_TEST);
RenderHelper.enableStandardItemLighting();
/*GL11.glScalef(0.2F * particleScale, 0.2F * particleScale, 0.2F * particleScale);
double intensity = (double) this.particleAge / (double) this.particleMaxAge;
double inverse = 1.0D - intensity;
Tessellator tessellator = Tessellator.instance;
RenderHelper.disableStandardItemLighting();
Random random = new Random(432L);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glDepthMask(false);
GL11.glPushMatrix();
float scale = 0.002F;
for(int i = 0; i < 300; i++) {
GL11.glRotatef(random.nextFloat() * 360.0F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(random.nextFloat() * 360.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(random.nextFloat() * 360.0F, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(random.nextFloat() * 360.0F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(random.nextFloat() * 360.0F, 0.0F, 1.0F, 0.0F);
float vert1 = (random.nextFloat() * 20.0F + 5.0F + 1 * 10.0F) * (float) (intensity * scale);
float vert2 = (random.nextFloat() * 2.0F + 1.0F + 1 * 2.0F) * (float) (intensity * scale);
tessellator.startDrawing(6);
tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, (float) inverse);
tessellator.addVertex(x + 0.0D, y + 0.0D, z + 0.0D);
tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 0.0F);
tessellator.addVertex(-0.866D * vert2, vert1, -0.5F * vert2);
tessellator.addVertex(0.866D * vert2, vert1, -0.5F * vert2);
tessellator.addVertex(0.0D, vert1, 1.0F * vert2);
tessellator.addVertex(-0.866D * vert2, vert1, -0.5F * vert2);
tessellator.draw();
}
GL11.glPopMatrix();
GL11.glDepthMask(true);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_BLEND);
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_ALPHA_TEST);
RenderHelper.enableStandardItemLighting();*/
}
}