#include <groupRoaming.h>
Inheritance diagram for groupRoaming:
Public Member Functions | |
groupRoaming (double areaDimension, double speed, std::map< NodeHandle, 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< NodeHandle, Vector > * | Neighbors, | |||
Repository * | repository, | |||
int | groupSize | |||
) |
00004 :MovementGenerator(areaDimension, speed, Neighbors) 00005 { 00006 // get access to the repository 00007 this->repository = repository; 00008 this->groupSize = groupSize; 00009 00010 groupNr = repository->getCounter() / groupSize; 00011 00012 if((repository->getCounter() % groupSize) == 0) { 00013 target.setValue(uniform(-areaDimension, areaDimension), uniform(-areaDimension, areaDimension)); 00014 repository->setPosition_size(repository->getPosition_size() + 1); 00015 repository->setPosition(groupNr, target); 00016 } 00017 else { 00018 target = repository->getPosition(groupNr); 00019 } 00020 00021 repository->setCounter(repository->getCounter() + 1); 00022 00023 Vector temp; 00024 temp.setValue(uniform(-20.0*speed, 20.0*speed), uniform(-20.0*speed, 20.0*speed)); 00025 position = target + temp; 00026 flock(); 00027 testBounds(); 00028 direction = target - position; 00029 direction.normalize(); 00030 }
void groupRoaming::move | ( | ) | [virtual] |
Defined in subclasses only.
Implements MovementGenerator.
00033 { 00034 if(groupNr <= repository->getCounter() / groupSize) { // not all members have spawned yet so just move a little 00035 flock(); 00036 testBounds(); 00037 } 00038 else { 00039 position += direction * speed; 00040 flock(); 00041 testBounds(); 00042 if(repository->getPosition(groupNr) != target) { 00043 target = repository->getPosition(groupNr); 00044 } 00045 if(target.distsqr(position) < 4.0*speed*speed) { 00046 target.setValue(uniform(-areaDimension, areaDimension), uniform(-areaDimension, areaDimension)); 00047 repository->setPosition(groupNr, target); 00048 } 00049 } 00050 direction = target - position; 00051 direction.normalize(); 00052 }
int groupRoaming::groupNr [protected] |
int groupRoaming::groupSize [protected] |
Repository* groupRoaming::repository [protected] |