mirror of
https://github.com/processing/processing4.git
synced 2026-02-09 00:29:22 +01:00
77 lines
1.7 KiB
Plaintext
77 lines
1.7 KiB
Plaintext
// Crowd Path Following
|
|
// Daniel Shiffman <http://www.shiffman.net>
|
|
// The Nature of Code, Spring 2009
|
|
|
|
// Via Reynolds: http://www.red3d.com/cwr/steer/CrowdPath.html
|
|
|
|
// Using this variable to decide whether to draw all the stuff
|
|
boolean debug = false;
|
|
|
|
|
|
// A path object (series of connected points)
|
|
Path path;
|
|
|
|
// Two vehicles
|
|
ArrayList<Vehicle> vehicles;
|
|
|
|
void setup() {
|
|
size(640,360);
|
|
smooth();
|
|
// Call a function to generate new Path object
|
|
newPath();
|
|
|
|
// We are now making random vehicles and storing them in an ArrayList
|
|
vehicles = new ArrayList<Vehicle>();
|
|
for (int i = 0; i < 120; i++) {
|
|
newVehicle(random(width),random(height));
|
|
}
|
|
}
|
|
|
|
void draw() {
|
|
background(255);
|
|
// Display the path
|
|
path.display();
|
|
|
|
for (Vehicle v : vehicles) {
|
|
// Path following and separation are worked on in this function
|
|
v.applyBehaviors(vehicles,path);
|
|
// Call the generic run method (update, borders, display, etc.)
|
|
v.run();
|
|
}
|
|
|
|
// Instructions
|
|
fill(0);
|
|
text("Hit 'd' to toggle debugging lines. Click the mouse to generate new vehicles.",10,height-16);
|
|
}
|
|
|
|
void newPath() {
|
|
// A path is a series of connected points
|
|
// A more sophisticated path might be a curve
|
|
path = new Path();
|
|
float offset = 60;
|
|
path.addPoint(offset,offset);
|
|
path.addPoint(width-offset,offset);
|
|
path.addPoint(width-offset,height-offset);
|
|
path.addPoint(width/2,height-offset*3);
|
|
path.addPoint(offset,height-offset);
|
|
}
|
|
|
|
void newVehicle(float x, float y) {
|
|
float maxspeed = random(2,4);
|
|
float maxforce = 0.3;
|
|
vehicles.add(new Vehicle(new PVector(x,y),maxspeed,maxforce));
|
|
}
|
|
|
|
void keyPressed() {
|
|
if (key == 'd') {
|
|
debug = !debug;
|
|
}
|
|
}
|
|
|
|
void mousePressed() {
|
|
newVehicle(mouseX,mouseY);
|
|
}
|
|
|
|
|
|
|