void Zombie::step() { Patch* p = patchHere<Patch>(); AgentSet<Patch> nghs = patchHere<Patch>()->neighbors<Patch>(); Patch* winningPatch = nghs.maxOneOf(CountHumansOnPatch()); face(winningPatch); move(.5); AgentSet<Human> humans; turtlesHere(humans); if (humans.size() > 0) { Human* human = humans.oneOf(); infect(human); } }
void ZombieObserver::gatherPopulation(std::vector<Patch*>& patchSet, T *io_data) { GridDimensions dim = grid()->dimensions(); int horizontal_run = dim.extents(0); std::vector<Patch*>::iterator iter = patchSet.begin(); int lxmin = minPxcor(); int lymin = minPycor(); while ( iter != patchSet.end() ) { int i = (*iter)->pxCor() - lxmin; int j = (*iter)->pyCor() - lymin; AgentSet<AgentType> set; (*iter)->turtlesOn(set); io_data[i + j * horizontal_run] = int(set.size()); iter++; } }
double operator()(const Patch* patch) const { AgentSet<Human> set; patch->turtlesOn(set); return set.size(); }