public void draw() { background(255); fill(cp.getColorValue()); rect(0, 0, width, height); windUpdate(); gravityForce.setForce(grav.set(wind, gravY)); // update gravityForce physics.setDrag(drag); // update drag physics.update(); // update the physics world // update and display circles for (Circle c : circles) { c.circUpdate(); c.display(); if (c.y > (height + 20)) { c.lock(); c.set(random(width), random(-height, -40)); c.unlock(); } else if (c.age > deathAge) { c.lock(); c.set(random(width), random(-height, -40)); c.unlock(); } } // -------------------- person tracking section --------------------- // set up array of people from TSPS TSPSPerson[] people = tspsReceiver.getPeopleArray(); Vec2D personLoc = new Vec2D(0, 0); peopleLength = people.length; // add attractors for (int i = attractors.size(); i < people.length; i++) { TSPSPerson person = people[i]; personLoc = new Vec2D(person.centroid.x * width, (person.centroid.y * height + yOff)); attractors.add(new Attractor(personLoc, width, attStrength)); } // add behaviors for (int i = 0; i < attractors.size(); i++) { Attractor a = attractors.get(i); physics.addBehavior(a.att()); } // update and display attractors for (int i = 0; i < people.length; i++) { TSPSPerson person = people[i]; Attractor a = attractors.get(i); a.update(person.centroid.x * width, (person.centroid.y * height + yOff)); // a.display(); //comment out this line for display } // remove attractors for (int i = attractors.size() - 1; i > people.length; i--) { Attractor a = attractors.get(i); a.killBurst(); attractors.remove(a); } // remove behaviors for (int i = physics.behaviors.size() - 1; i > people.length; i--) { ParticleBehavior2D b = physics.behaviors.get(i); physics.removeBehavior(b); } // playing it safe and removing everything if people array is empty if (people.length == 0) { for (int i = physics.behaviors.size() - 1; i > 0; i--) { ParticleBehavior2D b = physics.behaviors.get(i); physics.removeBehavior(b); } attractors.clear(); } // debugging println("people: " + people.length); println("behaviors" + physics.behaviors.size()); println("framerate: " + frameRate); hideControls(); }
// update the location of the attraction behavior public void update(float x, float y) { location.set(x, y); }