generated from tilera/1710mod
235 lines
8.1 KiB
Java
235 lines
8.1 KiB
Java
package net.anvilcraft.thaummach.particles;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.particle.EntityFX;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.world.World;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
public class FXWisp extends EntityFX {
|
|
public boolean shrink;
|
|
float moteParticleScale;
|
|
int moteHalfLife;
|
|
public boolean tinkle;
|
|
public int blendmode;
|
|
|
|
public FXWisp(
|
|
World world, double d, double d1, double d2, float f, float f1, float f2
|
|
) {
|
|
this(world, d, d1, d2, 1.0F, f, f1, f2);
|
|
}
|
|
|
|
public FXWisp(
|
|
World world, double d, double d1, double d2, float f, float f1, float f2, float f3
|
|
) {
|
|
super(world, d, d1, d2, 0.0, 0.0, 0.0);
|
|
this.shrink = false;
|
|
this.tinkle = false;
|
|
this.blendmode = 1;
|
|
if (f1 == 0.0F) {
|
|
f1 = 1.0F;
|
|
}
|
|
|
|
super.particleRed = f1;
|
|
super.particleGreen = f2;
|
|
super.particleBlue = f3;
|
|
super.particleGravity = 0.0F;
|
|
super.motionX = super.motionY = super.motionZ = 0.0;
|
|
super.particleScale *= f;
|
|
this.moteParticleScale = super.particleScale;
|
|
super.particleMaxAge = (int) (36.0 / (Math.random() * 0.3 + 0.7));
|
|
this.moteHalfLife = super.particleMaxAge / 2;
|
|
super.noClip = false;
|
|
}
|
|
|
|
public FXWisp(World world, double d, double d1, double d2, float f, int type) {
|
|
this(world, d, d1, d2, f, 0.0F, 0.0F, 0.0F);
|
|
switch (type) {
|
|
case 0:
|
|
super.particleRed = 0.75F + world.rand.nextFloat() * 0.25F;
|
|
super.particleGreen = 0.25F + world.rand.nextFloat() * 0.25F;
|
|
super.particleBlue = 0.75F + world.rand.nextFloat() * 0.25F;
|
|
break;
|
|
case 1:
|
|
super.particleRed = 0.5F + world.rand.nextFloat() * 0.3F;
|
|
super.particleGreen = 0.5F + world.rand.nextFloat() * 0.3F;
|
|
super.particleBlue = 0.2F;
|
|
break;
|
|
case 2:
|
|
super.particleRed = 0.2F;
|
|
super.particleGreen = 0.2F;
|
|
super.particleBlue = 0.7F + world.rand.nextFloat() * 0.3F;
|
|
break;
|
|
case 3:
|
|
super.particleRed = 0.2F;
|
|
super.particleGreen = 0.7F + world.rand.nextFloat() * 0.3F;
|
|
super.particleBlue = 0.2F;
|
|
break;
|
|
case 4:
|
|
super.particleRed = 0.7F + world.rand.nextFloat() * 0.3F;
|
|
super.particleGreen = 0.2F;
|
|
super.particleBlue = 0.2F;
|
|
break;
|
|
case 5:
|
|
this.blendmode = 771;
|
|
super.particleRed = world.rand.nextFloat() * 0.1F;
|
|
super.particleGreen = world.rand.nextFloat() * 0.1F;
|
|
super.particleBlue = world.rand.nextFloat() * 0.1F;
|
|
break;
|
|
case 6:
|
|
super.particleRed = 0.8F + world.rand.nextFloat() * 0.2F;
|
|
super.particleGreen = 0.8F + world.rand.nextFloat() * 0.2F;
|
|
super.particleBlue = 0.8F + world.rand.nextFloat() * 0.2F;
|
|
break;
|
|
case 7:
|
|
float rr = world.rand.nextFloat();
|
|
super.particleRed = 0.2F + rr * 0.3F;
|
|
super.particleGreen = 0.2F + rr * 0.3F;
|
|
super.particleBlue = 0.7F + world.rand.nextFloat() * 0.3F;
|
|
}
|
|
}
|
|
|
|
public FXWisp(
|
|
World world,
|
|
double d,
|
|
double d1,
|
|
double d2,
|
|
double x,
|
|
double y,
|
|
double z,
|
|
float f,
|
|
int type
|
|
) {
|
|
this(world, d, d1, d2, f, type);
|
|
double dx = x - super.posX;
|
|
double dy = y - super.posY;
|
|
double dz = z - super.posZ;
|
|
super.motionX = dx / (double) super.particleMaxAge;
|
|
super.motionY = dy / (double) super.particleMaxAge;
|
|
super.motionZ = dz / (double) super.particleMaxAge;
|
|
}
|
|
|
|
public void renderParticle(
|
|
Tessellator tessellator, float f, float f1, float f2, float f3, float f4, float f5
|
|
) {
|
|
float agescale = 0.0F;
|
|
if (this.shrink) {
|
|
agescale = ((float) super.particleMaxAge - (float) super.particleAge)
|
|
/ (float) super.particleMaxAge;
|
|
} else {
|
|
agescale = (float) super.particleAge / (float) this.moteHalfLife;
|
|
if (agescale > 1.0F) {
|
|
agescale = 2.0F - agescale;
|
|
}
|
|
}
|
|
|
|
super.particleScale = this.moteParticleScale * agescale;
|
|
tessellator.draw();
|
|
GL11.glPushMatrix();
|
|
GL11.glDepthMask(false);
|
|
GL11.glEnable(3042);
|
|
GL11.glBlendFunc(770, this.blendmode);
|
|
Minecraft.getMinecraft().renderEngine.bindTexture(
|
|
new ResourceLocation("thaummach", "textures/misc/p_large.png")
|
|
);
|
|
GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.75F);
|
|
float f10 = 0.5F * super.particleScale;
|
|
float f11 = (float
|
|
) (super.prevPosX + (super.posX - super.prevPosX) * (double) f
|
|
- EntityFX.interpPosX);
|
|
float f12 = (float
|
|
) (super.prevPosY + (super.posY - super.prevPosY) * (double) f
|
|
- EntityFX.interpPosY);
|
|
float f13 = (float
|
|
) (super.prevPosZ + (super.posZ - super.prevPosZ) * (double) f
|
|
- EntityFX.interpPosZ);
|
|
tessellator.startDrawingQuads();
|
|
tessellator.setBrightness(240);
|
|
tessellator.setColorRGBA_F(
|
|
super.particleRed, super.particleGreen, super.particleBlue, 0.5F
|
|
);
|
|
tessellator.addVertexWithUV(
|
|
(double) (f11 - f1 * f10 - f4 * f10),
|
|
(double) (f12 - f2 * f10),
|
|
(double) (f13 - f3 * f10 - f5 * f10),
|
|
0.0,
|
|
1.0
|
|
);
|
|
tessellator.addVertexWithUV(
|
|
(double) (f11 - f1 * f10 + f4 * f10),
|
|
(double) (f12 + f2 * f10),
|
|
(double) (f13 - f3 * f10 + f5 * f10),
|
|
1.0,
|
|
1.0
|
|
);
|
|
tessellator.addVertexWithUV(
|
|
(double) (f11 + f1 * f10 + f4 * f10),
|
|
(double) (f12 + f2 * f10),
|
|
(double) (f13 + f3 * f10 + f5 * f10),
|
|
1.0,
|
|
0.0
|
|
);
|
|
tessellator.addVertexWithUV(
|
|
(double) (f11 + f1 * f10 - f4 * f10),
|
|
(double) (f12 - f2 * f10),
|
|
(double) (f13 + f3 * f10 - f5 * f10),
|
|
0.0,
|
|
0.0
|
|
);
|
|
tessellator.draw();
|
|
GL11.glDisable(3042);
|
|
GL11.glDepthMask(true);
|
|
GL11.glPopMatrix();
|
|
Minecraft.getMinecraft().renderEngine.bindTexture(
|
|
new ResourceLocation("textures/particle/particles.png")
|
|
);
|
|
tessellator.startDrawingQuads();
|
|
}
|
|
|
|
public void onUpdate() {
|
|
EntityPlayer renderentity = Minecraft.getMinecraft().thePlayer;
|
|
int visibleDistance = 50;
|
|
|
|
if (renderentity.getDistance(super.posX, super.posY, super.posZ)
|
|
> (double) visibleDistance) {
|
|
this.setDead();
|
|
}
|
|
|
|
super.prevPosX = super.posX;
|
|
super.prevPosY = super.posY;
|
|
super.prevPosZ = super.posZ;
|
|
if (super.particleAge == 0 && this.tinkle
|
|
&& super.worldObj.rand.nextInt(3) == 0) {
|
|
super.worldObj.playSoundAtEntity(
|
|
this,
|
|
"random.orb",
|
|
0.02F,
|
|
0.5F
|
|
* ((super.worldObj.rand.nextFloat() - super.worldObj.rand.nextFloat())
|
|
* 0.6F
|
|
+ 2.0F)
|
|
);
|
|
}
|
|
|
|
if (super.particleAge++ >= super.particleMaxAge) {
|
|
this.setDead();
|
|
}
|
|
|
|
super.motionY -= 0.04 * (double) super.particleGravity;
|
|
this.moveEntity(super.motionX, super.motionY, super.motionZ);
|
|
super.motionX *= 0.9800000190734863;
|
|
super.motionY *= 0.9800000190734863;
|
|
super.motionZ *= 0.9800000190734863;
|
|
if (super.onGround) {
|
|
super.motionX *= 0.699999988079071;
|
|
super.motionZ *= 0.699999988079071;
|
|
}
|
|
}
|
|
|
|
public void setGravity(float value) {
|
|
super.particleGravity = value;
|
|
}
|
|
}
|