summaryrefslogtreecommitdiff
path: root/src/list.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/list.cpp')
-rw-r--r--src/list.cpp61
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;
}