KAgent example 2d seek

From KokkugiaWiki

a simple 2d agent with seek steering behavior

applet


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;
  }

}


Views