Files
sunny9898/task8/_ref/PROCESSING--Flow-field-master/vehicle.pde
louiscklaw 5637fbf94f update,
2025-02-01 02:07:58 +08:00

79 lines
1.5 KiB
Plaintext

class Vehicle {
PVector location;
PVector velocity;
PVector acceleration;
float maxSpeed;
float maxForce;
float r;
float lifespan;
color from;
color to;
Vehicle() {
location = new PVector(random(width),random(height));
velocity = new PVector(0,0);
acceleration = new PVector(0,0);
maxSpeed = 1;
maxForce = 0.04;
lifespan = 1000;
//colorMode(HSB,100);
from = #01A2A6;
to = #BDF271;
}
public void run() {
update();
//borders();
display();
}
void follow(FlowField flow) {
PVector desired = flow.lookup(location);
desired.mult(maxSpeed);
PVector steer = PVector.sub(desired,velocity);
steer.limit(maxForce);
applyForce(steer);
}
void applyForce (PVector f) {
PVector force = f.get();
acceleration.add(force);
}
void update() {
velocity.add(acceleration);
location.add(velocity);
acceleration.mult(0);
lifespan -=1;
}
void display() {
color interA = lerpColor(from, to, lifespan/1000);
stroke(interA,sin((lifespan/1000)*PI)*5);
noFill();
point(location.x,location.y);
}
void borders() {
if (location.x < 0) location.x = width;
if (location.y < 0) location.y = height;
if (location.x > width) location.x = 0;
if (location.y > height) location.y = 0;
}
boolean isDead() {
if (lifespan < 0 ) {
return true;
} else {
return false;
}
}
}