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