#include <MovementGenerator.h>
Inheritance diagram for MovementGenerator:
Public Member Functions | |
MovementGenerator (double areaDimension, double speed, std::map< NodeHandle, Vector > *Neighbors) | |
virtual | ~MovementGenerator () |
Standard destructor. | |
virtual void | move ()=0 |
Defined in subclasses only. | |
Vector | getPosition () |
Protected Member Functions | |
void | testBounds () |
Prevents the node from leaving the defined area. | |
void | flock () |
Protected Attributes | |
double | areaDimension |
double | speed |
Vector | direction |
Vector | position |
Vector | target |
std::map< NodeHandle, Vector > * | Neighbors |
std::map< NodeHandle, Vector >::iterator | itNeighbors |
MovementGenerator::MovementGenerator | ( | double | areaDimension, | |
double | speed, | |||
std::map< NodeHandle, Vector > * | Neighbors | |||
) |
areaDimension | Movement range from [-areaDimension, -areaDimension] to [areaDimension, areaDimension]. | |
speed | Movement speed in units per movement. |
00004 { 00005 this->areaDimension = areaDimension; 00006 this->speed = speed; 00007 this->Neighbors = Neighbors; 00008 }
void MovementGenerator::flock | ( | ) | [protected] |
00019 { 00020 Vector vFlock; 00021 vFlock.setValue(0.0, 0.0); 00022 for(itNeighbors = Neighbors->begin(); itNeighbors != Neighbors->end(); ++itNeighbors) { 00023 if(position.distsqr(itNeighbors->second) < 4.0*speed*speed) { 00024 Vector temp; 00025 temp = itNeighbors->second - position; 00026 temp.normalize(); 00027 vFlock += temp; 00028 } 00029 } 00030 vFlock.normalize(); 00031 vFlock = vFlock * (speed/2.0); 00032 position -= vFlock; 00033 }
Vector MovementGenerator::getPosition | ( | ) | [inline] |
virtual void MovementGenerator::move | ( | ) | [pure virtual] |
void MovementGenerator::testBounds | ( | ) | [protected] |
Prevents the node from leaving the defined area.
00011 { 00012 if(position.getX() < -areaDimension) position.setX(-areaDimension); 00013 if(position.getX() > areaDimension) position.setX(areaDimension); 00014 if(position.getY() < -areaDimension) position.setY(-areaDimension); 00015 if(position.getY() > areaDimension) position.setY(areaDimension); 00016 }
double MovementGenerator::areaDimension [protected] |
Vector MovementGenerator::direction [protected] |
std::map<NodeHandle, Vector>::iterator MovementGenerator::itNeighbors [protected] |
std::map<NodeHandle, Vector>* MovementGenerator::Neighbors [protected] |
Vector MovementGenerator::position [protected] |
double MovementGenerator::speed [protected] |
Vector MovementGenerator::target [protected] |