tonyliaoss

Just another WordPress.com site

ArrayList systems;

void setup() {
size(640, 360);
systems = new ArrayList();
smooth();
}

void draw() {
background(0);
for (ParticleSystem ps: systems) {
ps.run();
ps.addParticle();
}

if (systems.isEmpty()) {
fill(255);
textAlign(CENTER);
text(“click mouse to add particle systems”, width/2, height/2);
}
}

void mousePressed() {
systems.add(new ParticleSystem(1, new PVector(mouseX, mouseY)));
}

// A subclass of Particle

class CrazyParticle extends Particle {

// Just adding one new variable to a CrazyParticle
// It inherits all other fields from “Particle”, and we don’t have to retype them!
float theta;

// The CrazyParticle constructor can call the parent class (super class) constructor
CrazyParticle(PVector l) {
// “super” means do everything from the constructor in Particle
super(l);
// One more line of code to deal with the new variable, theta
theta = 0.0;

}

// Notice we don’t have the method run() here; it is inherited from Particle

// This update() method overrides the parent class update() method
void update() {
super.update();
// Increment rotation based on horizontal velocity
float theta_vel = (vel.x * vel.mag()) / 10.0f;
theta += theta_vel;
}

// Override timer
void timer() {
timer -= 0.5;
}

// Method to display
void render() {
// Render the ellipse just like in a regular particle
super.render();

// Then add a rotating line
pushMatrix();
translate(loc.x,loc.y);
rotate(theta);
stroke(255,timer);
line(0,0,25,0);
popMatrix();
}
}

// A simple Particle class

class Particle {
PVector location;
PVector velocity;
PVector acceleration;
float lifespan;

Particle(PVector l) {
acceleration = new PVector(0,0.05);
velocity = new PVector(random(-1,1),random(-2,0));
location = l.get();
lifespan = 255.0;
}

void run() {
update();
display();
}

// Method to update location
void update() {
velocity.add(acceleration);
location.add(velocity);
lifespan -= 2.0;
}

// Method to display
void display() {
stroke(255,lifespan);
fill(255,lifespan);
ellipse(location.x,location.y,8,8);
}

// Is the particle still useful?
boolean isDead() {
if (lifespan < 0.0) {
return true;
} else {
return false;
}
}
}

// An ArrayList is used to manage the list of Particles

class ParticleSystem {

ArrayList particles; // An arraylist for all the particles
PVector origin; // An origin point for where particles are birthed

ParticleSystem(int num, PVector v) {
particles = new ArrayList(); // Initialize the arraylist
origin = v.get(); // Store the origin point
for (int i = 0; i < num; i++) {
particles.add(new Particle(origin)); // Add "num" amount of particles to the arraylist
}
}

void run() {
// Cycle through the ArrayList using Iterator we are deleting
Iterator it = particles.iterator();
while (it.hasNext()) {
Particle p = it.next();
p.run();
if (p.isDead()) {
it.remove();
}
}
}

void addParticle() {
particles.add(new Particle(origin));
}

void addParticle(Particle p) {
particles.add(p);
}

// A method to test if the particle system still has particles
boolean dead() {
if (particles.isEmpty()) {
return true;
} else {
return false;
}
}

}

Hello World!


#include <stdio.h>

int main(void)
{
    printf("Hello World!\n");
    return 0;
}