groupRoaming.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00024 #include "groupRoaming.h"
00025
00026 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 }
00043
00044
00045 void groupRoaming::move()
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 }