KAgent example 2d seek
From KokkugiaWiki
a simple 2d agent with seek steering behavior
sketch
import kGeom.*;
kAgent agent1 = new kAgent(new kVec(250,250), new kVec(1,1), 5, 0.2);
void setup(){
size(500,500);
frameRate(30);
smooth();
}
void draw(){
background(100);
agent1.seek(new kVec(mouseX,mouseY));
agent1.update();
agent1.render();
}
kAgent class
class kAgent{
kVec acc;
kVec vel;
kVec pos;
float maxVel;
float maxForce;
// constructor
kAgent(
kVec _pos,
kVec _vel,
float _maxVel,
float _maxForce){
acc = new kVec(0,0);
vel = new kVec(0,0);
pos = kVec.clone(_pos);
maxVel = _maxVel;
maxForce = _maxForce;
}
// calculates new location
void update(){
vel.plus(acc);
vel.limit(maxVel);
pos.plus(vel);
acc = new kVec(0,0); // reset acc to 0 each iteration
borders();
}
// seek
void seek(kVec target) {
acc.plus(steer(target));
}
// steer
kVec steer(kVec target) {
kVec steer; // The steering vector
target.minus(pos);
float distance = target.length();
if (distance > 0) {
target.normalize();
target.scale(maxVel);
target.minus(vel);
steer = kVec.clone(target);
steer.limit(maxForce);
}
else {
steer = new kVec(0,0);
}
return steer;
}
void render() {
fill(200);
stroke(255);
ellipse(pos.x,pos.y,10,10);
}
void borders() {
if (pos.x < 0) pos.x = width;
if (pos.y < 0) pos.y = height;
if (pos.x > width) pos.x = 0;
if (pos.y > height) pos.y = 0;
}
}
