#include <groupRoaming.h>
Inheritance diagram for groupRoaming:
Public Member Functions | |
groupRoaming (double areaDimension, double speed, std::map< TransportAddress, Vector > *Neighbors, Repository *repository, int groupSize) | |
virtual void | move () |
Defined in subclasses only. | |
Protected Attributes | |
Repository * | repository |
int | groupNr |
int | groupSize |
groupRoaming::groupRoaming | ( | double | areaDimension, | |
double | speed, | |||
std::map< TransportAddress, Vector > * | Neighbors, | |||
Repository * | repository, | |||
int | groupSize | |||
) |
00027 :MovementGenerator(areaDimension, speed, Neighbors) 00028 { 00029 // get access to the repository 00030 this->repository = repository; 00031 this->groupSize = groupSize; 00032 00033 groupNr = repository->getCounter() / groupSize; 00034 00035 if((repository->getCounter() % groupSize) == 0) { 00036 target.setValue(uniform(-areaDimension, areaDimension), uniform(-areaDimension, areaDimension)); 00037 repository->setPosition_size(repository->getPosition_size() + 1); 00038 repository->setPosition(groupNr, target); 00039 } 00040 else { 00041 target = repository->getPosition(groupNr); 00042 } 00043 00044 repository->setCounter(repository->getCounter() + 1); 00045 00046 Vector temp; 00047 temp.setValue(uniform(-20.0*speed, 20.0*speed), uniform(-20.0*speed, 20.0*speed)); 00048 position = target + temp; 00049 flock(); 00050 testBounds(); 00051 direction = target - position; 00052 direction.normalize(); 00053 }
void groupRoaming::move | ( | ) | [virtual] |
Defined in subclasses only.
Implements MovementGenerator.
00056 { 00057 if(groupNr <= repository->getCounter() / groupSize) { // not all members have spawned yet so just move a little 00058 flock(); 00059 testBounds(); 00060 } 00061 else { 00062 position += direction * speed; 00063 flock(); 00064 testBounds(); 00065 if(repository->getPosition(groupNr) != target) { 00066 target = repository->getPosition(groupNr); 00067 } 00068 if(target.distsqr(position) < 4.0*speed*speed) { 00069 target.setValue(uniform(-areaDimension, areaDimension), uniform(-areaDimension, areaDimension)); 00070 repository->setPosition(groupNr, target); 00071 } 00072 } 00073 direction = target - position; 00074 direction.normalize(); 00075 }
Repository* groupRoaming::repository [protected] |
int groupRoaming::groupNr [protected] |
int groupRoaming::groupSize [protected] |