diff options
Diffstat (limited to 'src/list.cpp')
-rw-r--r-- | src/list.cpp | 61 |
1 files changed, 32 insertions, 29 deletions
diff --git a/src/list.cpp b/src/list.cpp index 3127d76..5309109 100644 --- a/src/list.cpp +++ b/src/list.cpp @@ -5,13 +5,13 @@ List::List(Window m) main = m; int i; - SDL_Rect Rect = {0,0,CREATURE_SIZE,CREATURE_SIZE}; + SDL_Rect Rect = {0,0,CREATURE_SIZE_START,CREATURE_SIZE_START}; for(i=0;i<CREATURES;i++){ Creature X(main,Rect); C.push_back(X); } - Rect = {0,0,RESOURCE_SIZE,RESOURCE_SIZE}; + Rect = {0,0,RESOURCE_SIZE_START,RESOURCE_SIZE_START}; for(i=0;i<RESOURCES;i++){ Resource Y(main,Rect); R.push_back(Y); @@ -19,59 +19,62 @@ List::List(Window m) } -void List::Place() -{ - for(list<Creature>::iterator it = C.begin(); it!=C.end(); it++) - it->Place(); - - for(list<Resource>::iterator it = R.begin(); it!=R.end(); it++){ - if(it->getAmount()<=0) - R.erase(it--); - else - it->Place(); - } +void List::Remove() +{ + for(list<Creature>::iterator it = C.begin(); it!=C.end(); it++) + if(it->getHealth()<=0){ + SDL_Rect Rect = it->getRect(); + Resource r = Resource(main,Rect); + R.push_back(r); + C.erase(it--); + } + + for(list<Resource>::iterator it = R.begin(); it!=R.end(); it++) + if(it->getAmount()<=0) + R.erase(it--); } void List::Behavior() { for(list<Creature>::iterator it = C.begin(); it!=C.end(); it++){ - list<Entity*> N = getNear(*it); it->giveN(N); - it->Behavior(); - - if(it->getHealth()<=0){ - SDL_Rect Rect = it->getRect(); - Resource r = Resource(main,Rect); - R.push_back(r); - C.erase(it--); - } } + + for(list<Resource>::iterator it = R.begin(); it!=R.end(); it++) + it->grow(); +} - SDL_Rect Rect = {0,0,RESOURCE_SIZE,RESOURCE_SIZE}; +void List::Place() +{ + SDL_Rect Rect = {0,0,RESOURCE_SIZE_START,RESOURCE_SIZE_START}; while(R.size() < MINIMUM_RESOURCES){ Resource Y(main,Rect); R.push_back(Y); } + + for(list<Creature>::iterator it = C.begin(); it!=C.end(); it++) + it->Place(); + + for(list<Resource>::iterator it = R.begin(); it!=R.end(); it++) + it->Place(); } list<Entity*> List::getNear(Creature nC) { list<Entity*> N; - for(list <Resource>::iterator it = R.begin(); it!=R.end(); it++){ + for(list <Resource>::iterator it = R.begin(); it!=R.end(); it++) if( nC.getBestSense() > Distance(nC.getRect(),it->getRect()) ) N.push_back(&(*it)); - } - - for(list <Creature>::iterator it = C.begin(); it!=C.end(); it++){ + + for(list <Creature>::iterator it = C.begin(); it!=C.end(); it++) if( &nC == &(*it)) continue; else if( nC.getBestSense() > Distance(nC.getRect(),it->getRect()) ) N.push_back(&(*it)); - } - + return N; } |