package electroblob.wizardry.client.particle; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class ParticleBlizzard extends ParticleSnow { private double angle; private double radius; private double speed; public ParticleBlizzard(World world, int maxAge, double originX, double originZ, double radius, double yPos){ super(world, 0, 0, 0, 0, 0, 0, maxAge); this.angle = this.rand.nextDouble() * Math.PI * 2; double x = originX - Math.cos(angle) * radius; double z = originZ + radius * Math.sin(angle); this.radius = radius; this.setPosition(x, yPos, z); this.prevPosX = x; this.prevPosY = yPos; this.prevPosZ = z; if(rand.nextBoolean()){ speed = rand.nextDouble() * 2 + 1; }else{ speed = rand.nextDouble() * -2 - 1; } this.multipleParticleScaleBy(1.5f); } @Override public void init(){ super.init(); this.fullBrightness = true; } // @Override // public void renderParticle(VertexBuffer buffer, Entity entity, float partialTicks, float rotationX, float // rotationZ, float rotationYZ, float rotationXY, float rotationXZ){ // if(this.particleAge < this.particleMaxAge / 3 || (this.particleAge + this.particleMaxAge) / 3 % 2 == 0){ // super.renderParticle(buffer, entity, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); // } // } @Override public void onUpdate(){ this.prevPosX = this.posX; this.prevPosY = this.posY; this.prevPosZ = this.posZ; if(this.particleAge++ >= this.particleMaxAge){ this.setExpired(); } // This is in radians per tick... double omega = Math.signum(speed) * ((Math.PI * 2) / 20 - speed / (20 * radius)); // v = r times omega; therefore the normalised velocity vector needs to be r times the angle increment / 2 pi. this.angle += omega; this.motionY -= 0.04D * (double)this.particleGravity; this.motionZ = radius * omega * Math.cos(angle); this.motionX = radius * omega * Math.sin(angle); this.move(motionX, motionY, motionZ); if(this.particleAge > this.particleMaxAge / 2){ this.setAlphaF( 1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge); } } }