import processing.core.PApplet; import processing.core.PImage; public class Fire { PApplet parent; String textureDirectory = ""; ParticleSystem ps; PImage[] textures = new PImage[4]; Vector3D origin; Vector3D gravity = new Vector3D(0, -0.179F, 0); int numParticles = 200; int newParticlesPerStep = 15; public Fire(PApplet parent, Vector3D o, String textureDirectory) { this.parent = parent; this.textureDirectory = textureDirectory; this.origin = o.copy(); makeFireTextures(); ps = new ParticleSystem(parent, numParticles, origin, textures); } public void step() { // add gravity ps.add_force(gravity); // step the particle system ps.step(); // add some more particles for (int i = 0; i < newParticlesPerStep; i++) { ps.addParticle(); } } private void makeFireTextures() { // Create an alpha masked image to be applied as the particle's texture PImage msk1 = parent.loadImage(textureDirectory + "fire_1.gif"); PImage msk2 = parent.loadImage(textureDirectory + "fire_2.gif"); PImage msk3 = parent.loadImage(textureDirectory + "fire_3.gif"); PImage msk4 = parent.loadImage(textureDirectory + "smoke.bmp"); PImage img1 = new PImage(msk1.width, msk1.height); for (int i = 0; i < img1.pixels.length; i++) img1.pixels[i] = parent.color(255); img1.mask(msk1); PImage img2 = new PImage(msk2.width, msk2.height); for (int i = 0; i < img2.pixels.length; i++) img2.pixels[i] = parent.color(255); img2.mask(msk2); PImage img3 = new PImage(msk3.width, msk3.height); for (int i = 0; i < img3.pixels.length; i++) img3.pixels[i] = parent.color(255); img3.mask(msk3); PImage img4 = new PImage(msk4.width, msk4.height); for (int i = 0; i < img4.pixels.length; i++) img4.pixels[i] = parent.color(255); img4.mask(msk4); textures[0] = img1; textures[1] = img2; textures[2] = img3; textures[3] = img4; } public Vector3D getOrigin() { return origin; } public void setOrigin(Vector3D origin) { this.origin = origin; } public Vector3D getGravity() { return gravity; } public void setGravity(Vector3D gravity) { this.gravity = gravity; } public int getNumParticles() { return numParticles; } public void setNumParticles(int numParticles) { this.numParticles = numParticles; } }