#include "list.hpp" List::List() { int i; DNA d = DNA(HERBAVORE_TYPE); Rectangle tmp; for(i=0;i::iterator it = organisms.begin(); it!= organisms.end(); it++) if(it->getHealth()<=0){ if(it->getType() == PLANT_TYPE or it->getType() == CORPSE_TYPE) organisms.erase(it--); else{ DNA d = DNA(CORPSE_TYPE); Organism X(it->getRectangle(), d); organisms.push_back(X); organisms.erase(it--); } } } void List::Behavior() { for(std::list::iterator it = organisms.begin(); it!= organisms.end(); it++){ if(it->getType() == PLANT_TYPE or it->getType() == CORPSE_TYPE) it->grow(); else{ std::vector near = getNear(*it); it->giveNearMe(near); it->Behavior(); if(it->getPregnancyReady()){ Organism X(it->getRectangle(),it->getChildsDNA()); organisms.push_back(X); it->hadPregnancy(); } } } } void List::Place() { tree.clear(); for(std::list::iterator it = organisms.begin(); it!= organisms.end(); it++) tree.insert(&(*it));; } std::vector List::getNear(Organism c) { std::vector near; near = tree.retrieve(near, c.getRectangle()); for(std::vector::iterator it = near.begin(); it!= near.end(); it++) if(c.getBestSense() < Distance(c.getRectangle(),(*it)->getRectangle())) near.erase(it--); return near; }