mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
88 lines
3.0 KiB
Java
88 lines
3.0 KiB
Java
package com.hbm.particle;
|
|
|
|
import com.hbm.main.ModEventHandlerClient;
|
|
import com.hbm.util.Vec3NT;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.world.World;
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public class ParticleAshes extends EntityFXRotating {
|
|
|
|
public ParticleAshes(World world, double x, double y, double z, float scale) {
|
|
super(world, x, y, z);
|
|
particleIcon = ModEventHandlerClient.particleBase;
|
|
this.particleMaxAge = 1200 + rand.nextInt(20);
|
|
this.particleScale = scale * 0.9F + rand.nextFloat() * 0.2F;
|
|
|
|
this.particleGravity = 0.01F;
|
|
|
|
this.particleRed = this.particleGreen = this.particleBlue = this.rand.nextFloat() * 0.1F + 0.1F;
|
|
}
|
|
|
|
@Override
|
|
public void onUpdate() {
|
|
this.prevPosX = this.posX;
|
|
this.prevPosY = this.posY;
|
|
this.prevPosZ = this.posZ;
|
|
|
|
this.particleAge++;
|
|
|
|
if(this.particleAge >= this.particleMaxAge) {
|
|
this.setDead();
|
|
}
|
|
|
|
this.motionY -= particleGravity;
|
|
this.prevRotationPitch = this.rotationPitch;
|
|
|
|
if(!this.onGround) this.rotationPitch += 2 * ((this.getEntityId() % 2) - 0.5);
|
|
|
|
this.motionX *= 0.95D;
|
|
this.motionY *= 0.99D;
|
|
this.motionZ *= 0.95D;
|
|
|
|
boolean wasOnGround = this.onGround;
|
|
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
|
if(!wasOnGround && this.onGround) this.rotationPitch = rand.nextFloat() * 360F;
|
|
|
|
if(this.getEntityId() % 5 == 0 && this.onGround && rand.nextInt(15) == 0) {
|
|
worldObj.spawnParticle("smoke", posX, posY + 0.125, posZ, 0, 0.05, 0);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void renderParticle(Tessellator tess, float interp, float sX, float sY, float sZ, float dX, float dZ) {
|
|
|
|
float timeLeft = this.particleMaxAge - (this.particleAge + interp);
|
|
|
|
if(timeLeft < 40) {
|
|
this.particleAlpha = timeLeft / 40F;
|
|
} else {
|
|
this.particleAlpha = 1F;
|
|
}
|
|
|
|
tess.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha);
|
|
tess.setNormal(0.0F, 1.0F, 0.0F);
|
|
|
|
if(this.onGround) {
|
|
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);
|
|
|
|
Vec3NT vec = new Vec3NT(particleScale, 0, particleScale).rotateAroundYDeg(this.rotationPitch);
|
|
|
|
tess.addVertexWithUV(pX + vec.xCoord, pY + 0.05, pZ + vec.zCoord, particleIcon.getMaxU(), particleIcon.getMaxV());
|
|
vec.rotateAroundYDeg(90);
|
|
tess.addVertexWithUV(pX + vec.xCoord, pY + 0.05, pZ + vec.zCoord, particleIcon.getMaxU(), particleIcon.getMinV());
|
|
vec.rotateAroundYDeg(90);
|
|
tess.addVertexWithUV(pX + vec.xCoord, pY + 0.05, pZ + vec.zCoord, particleIcon.getMinU(), particleIcon.getMinV());
|
|
vec.rotateAroundYDeg(90);
|
|
tess.addVertexWithUV(pX + vec.xCoord, pY + 0.05, pZ + vec.zCoord, particleIcon.getMinU(), particleIcon.getMaxV());
|
|
} else {
|
|
renderParticleRotated(tess, interp, sX, sY, sZ, dX, dZ, this.particleScale);
|
|
}
|
|
}
|
|
}
|