summaryrefslogtreecommitdiff
path: root/src/creature.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/creature.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/creature.cpp')
-rw-r--r--src/creature.cpp43
1 files changed, 23 insertions, 20 deletions
diff --git a/src/creature.cpp b/src/creature.cpp
index a71a0b7..7c4c108 100644
--- a/src/creature.cpp
+++ b/src/creature.cpp
@@ -3,7 +3,6 @@
Creature::Creature(Window m, SDL_Rect R)
{
renderer = m.getRenderer();
- type = 1;
rect = R;
if(rect.x == 0 && rect.y == 0){
@@ -11,12 +10,16 @@ Creature::Creature(Window m, SDL_Rect R)
rect.y = rand()%WINDOW_Y;
}
+ type = CREATURE_TYPE;
health = CREATURE_START_HEALTH;
- maxHealth = CREATURE_MAX_HEALTH;
+ maxHealth = CREATURE_MAX_HEALTH;
reach = CREATURE_REACH;
speed = CREATURE_SPEED;
bestSense = CREATURE_BEST_SENSE;
+ bite = CREATURE_BITE;
+ amountToGrow= CREATURE_AMOUNT_TO_GROW;
+ gender = rand() % 2;
hungry = false;
hasTarget = false;
wander = false;
@@ -29,7 +32,8 @@ void Creature::Behavior()
this->Priority();
- this->setTarget();
+ if(!hasTarget)
+ this->setTarget();
this->Action();
}
@@ -48,19 +52,13 @@ void Creature::Priority()
void Creature::setTarget()
{
- if(hasTarget)
- return;
-
for(list <Entity*>::iterator it = N.begin(); it!=N.end(); it++){
- if((*it)->getType() == 2 && hungry){
- if(!hasTarget){
- target = *it;
- hasTarget = true;
- wander = false;
- }
- else
- break;
- }
+ if( (*it)->getType() == RESOURCE_TYPE && hungry){
+ target = *it;
+ hasTarget = true;
+ wander = false;
+ break;
+ }
}
if(!hasTarget&&!wander){
@@ -73,10 +71,15 @@ void Creature::setTarget()
void Creature::Action()
{
- if(hasTarget){
- if(Distance(rect,target->getRect())<reach){
- target->eat();
- health+=10;
+ if(hasTarget){
+ if( Distance(rect,target->getRect() ) < reach ){
+ target->eat(bite);
+ health+=bite;
+ amountAte++;
+ if(rect.w <= CREATURE_SIZE_MAX && amountToGrow <= amountAte){
+ amountAte = 0;
+ rect.w = rect.h = rect.w + 1;
+ }
}
else
Move(target->getRect());
@@ -86,7 +89,7 @@ void Creature::Action()
}
}
else{
- if(Distance(rect,wTarget)<5)
+ if(Distance(rect,wTarget) < reach)
wander = false;
else
Move(wTarget);