summaryrefslogtreecommitdiff
path: root/src/list.cpp
diff options
context:
space:
mode:
authortom <tombarrett@siu.edu>2017-01-19 13:33:46 -0600
committertom <tombarrett@siu.edu>2017-01-19 13:33:46 -0600
commit11c5d147b845d4323f2e94c1ac47b6001420d8e6 (patch)
treeeafc67bb6844dc14b56ad5d8eadf6d200b78e0d1 /src/list.cpp
parent0c2335f4a717e53c2456e49407dfbbd0ffa20f06 (diff)
-added entity growing
-added bite functionality for creature/resource -added gender (next largest feature is reproduction) -refractored creature setTarget function to make more sense -added constants for starting size of entity and max size of entity -refractored list to make make much more sense -added constants for types
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;
}