#include <groupRoaming.h>
Simulates nodes roaming the area in groups.
Public Member Functions | |
groupRoaming (double areaDimension, double speed, NeighborMap *Neighbors, GlobalCoordinator *coordinator, int groupSize) | |
virtual | ~groupRoaming () |
virtual void | move () |
Defined in subclasses only. | |
Protected Attributes | |
GlobalCoordinator * | coordinator |
int | groupNr |
groupRoaming::groupRoaming | ( | double | areaDimension, | |
double | speed, | |||
NeighborMap * | Neighbors, | |||
GlobalCoordinator * | coordinator, | |||
int | groupSize | |||
) |
00027 :MovementGenerator(areaDimension, speed, Neighbors) 00028 { 00029 // get access to the repository 00030 this->coordinator = coordinator; 00031 00032 groupNr = coordinator->getPeerCount() / groupSize; 00033 00034 if((coordinator->getPeerCount() % groupSize) == 0) { 00035 target.x = uniform(0.0, areaDimension); 00036 target.y = uniform(0.0, areaDimension); 00037 coordinator->increasePositionSize(); 00038 coordinator->setPosition(groupNr, target); 00039 } 00040 else 00041 target = coordinator->getPosition(groupNr); 00042 00043 coordinator->increasePeerCount(); 00044 }
void groupRoaming::move | ( | ) | [virtual] |
Defined in subclasses only.
Implements MovementGenerator.
00048 { 00049 if(coordinator->getPosition(groupNr) != target) 00050 target = coordinator->getPosition(groupNr); 00051 00052 flock(); 00053 position += direction * speed; 00054 testBounds(); 00055 00056 if(target.distanceSqr(position) < speed * speed) { 00057 target.x = uniform(0.0, areaDimension); 00058 target.y = uniform(0.0, areaDimension); 00059 coordinator->setPosition(groupNr, target); 00060 } 00061 }
GlobalCoordinator* groupRoaming::coordinator [protected] |
int groupRoaming::groupNr [protected] |