97 lines
4.1 KiB
Java
97 lines
4.1 KiB
Java
package electroblob.wizardry.client.particle;
|
|
|
|
import electroblob.wizardry.Wizardry;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public class ParticleSparkle extends ParticleCustomTexture {
|
|
|
|
/* I have now figured out what particle factories are for: they separate out the individual uses of the varargs
|
|
* parameter in spawnParticle so they are kept with the particle class. For my purposes, it would be easier to do
|
|
* that in the particle spawning method itself. */
|
|
|
|
private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/particle/sparkle_particles.png");
|
|
|
|
// NOTE: Uncomment once 2.1.0 is released
|
|
//private final float initialRed;
|
|
//private final float initialGreen;
|
|
//private final float initialBlue;
|
|
|
|
// TODO: Assign these via the constructors, as part of the refactoring for particle parameters.
|
|
// NOTE: Uncomment once 2.1.0 is released
|
|
// private final float fadeRed = 1;
|
|
// private final float fadeGreen = 1;
|
|
// private final float fadeBlue = 0;
|
|
|
|
public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b){
|
|
super(world, x, y, z, vx, vy, vz);
|
|
this.setRBGColorF(r, g, b);
|
|
// NOTE: Uncomment once 2.1.0 is released
|
|
//initialRed = r;
|
|
//initialGreen = g;
|
|
//initialBlue = b;
|
|
this.particleMaxAge = 48 + this.rand.nextInt(12);
|
|
}
|
|
|
|
public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b, int maxAge){
|
|
super(world, x, y, z, vx, vy, vz, maxAge);
|
|
this.setRBGColorF(r, g, b);
|
|
// NOTE: Uncomment once 2.1.0 is released
|
|
//initialRed = r;
|
|
//initialGreen = g;
|
|
//initialBlue = b;
|
|
}
|
|
|
|
public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b, boolean doGravity){
|
|
this(world, x, y, z, vx, vy, vz, r, g, b);
|
|
this.particleGravity = doGravity ? 1 : 0;
|
|
}
|
|
|
|
public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b, int maxAge, boolean doGravity){
|
|
this(world, x, y, z, vx, vy, vz, r, g, b, maxAge);
|
|
this.particleGravity = doGravity ? 1 : 0;
|
|
}
|
|
|
|
@Override
|
|
public void init(){
|
|
this.setParticleTextureIndex(rand.nextInt(16));
|
|
this.particleScale *= 0.75f;
|
|
this.particleGravity = 0;
|
|
this.canCollide = false;
|
|
this.fullBrightness = true;
|
|
}
|
|
|
|
@Override public ResourceLocation getTexture(){ return TEXTURE; }
|
|
@Override protected int getXFrames(){ return 4; }
|
|
@Override protected int getYFrames(){ return 4; }
|
|
|
|
@Override
|
|
public void onUpdate(){
|
|
|
|
super.onUpdate();
|
|
// Fading
|
|
if(this.particleAge > this.particleMaxAge / 2){
|
|
this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
|
|
}
|
|
// Colour fading TODO Uncomment once 2.1.0 is released
|
|
// float ageFraction = (float)this.particleAge / (float)this.particleMaxAge;
|
|
// this.setRBGColorF(this.initialRed + (this.fadeRed - this.initialRed)*ageFraction,
|
|
// this.initialGreen + (this.fadeGreen - this.initialGreen)*ageFraction,
|
|
// this.initialBlue + (this.fadeBlue - this.initialBlue)*ageFraction);
|
|
|
|
this.setParticleTextureIndex((this.particleAge * 11)/this.particleMaxAge);
|
|
}
|
|
|
|
/*
|
|
* As a side note, I see a lot of magic mods with fancy-looking particle effects that really seem to 'glow'. It's
|
|
* actually not that hard - you simply create a reasonably high-res texture with translucency and then set the
|
|
* OpenGL blend function to something like SRC_ALPHA, SRC_ALPHA or ONE, ONE. The thing is... they're not very
|
|
* Minecraft-y. I still maintain that part of wizardry's appeal is that it stays true to the game's pixelated charm,
|
|
* rather than trying to make it something it's not. Still, the newer textures are much better than the defaults I
|
|
* used to use.
|
|
*/
|
|
}
|