summaryrefslogtreecommitdiff
path: root/src/creature.cpp
diff options
context:
space:
mode:
authortom <tombarrett@siu.edu>2017-02-12 05:59:12 -0600
committertom <tombarrett@siu.edu>2017-02-12 05:59:12 -0600
commitaa5c31be6ec6a688e8d3a66c770ba99be8e060c9 (patch)
tree702a7154031cb9c96d0e7fd495868418433bb842 /src/creature.cpp
parent60b53e09cca0bdb4cddff76457e990ee33c42b2f (diff)
-minor constant changes
-implemented dna structure, which carries the creatures attributes suchas speed and reach -currently a child inherits 100% the same dna as the mother -removed sing namespace std
Diffstat (limited to 'src/creature.cpp')
-rw-r--r--src/creature.cpp81
1 files changed, 34 insertions, 47 deletions
diff --git a/src/creature.cpp b/src/creature.cpp
index 9e51b04..7a86af9 100644
--- a/src/creature.cpp
+++ b/src/creature.cpp
@@ -1,34 +1,21 @@
#include "creature.hpp"
-Creature::Creature(Window m, SDL_Rect R)
+Creature::Creature(Window M, SDL_Rect R, Dna D)
{
- renderer = m.getRenderer();
- rect = R;
+ renderer = M.getRenderer();
+ rect = R;
+ mine = D;
if(rect.x == 0 && rect.y == 0){
- rect.x = rand()%WINDOW_X;
- rect.y = rand()%WINDOW_Y;
+ rect.x = rand()%WINDOW_X;
+ rect.y = rand()%WINDOW_Y;
}
- type = CREATURE_TYPE;
- health = CREATURE_START_HEALTH;
- maxHealth = CREATURE_MAX_HEALTH;
- reach = CREATURE_REACH;
- speed = CREATURE_SPEED;
- bestSense = CREATURE_BEST_SENSE;
- bite = CREATURE_BITE;
- amountToGrow = CREATURE_AMOUNT_TO_GROW;
- expectedPregnancyTime = CREATURE_EXPECTED_PREGNANCY_TIME;
- expectedAge = CREATURE_EXPECTED_AGE;
-
- gender = rand() % 2;
- age = 0;
- hungry = false;
- hasTarget = false;
- wander = false;
- pregnate = false;
- pregnancyReady = false;
- able = true;
+ type = CREATURE_TYPE;
+ health = mine.maxHealth/2;
+ gender = rand() % 2;
+ able = true;
+ pregnancyReady = false;
}
void Creature::Behavior()
@@ -46,18 +33,18 @@ void Creature::Behavior()
if(pregnate){
pregnancyTime++;
- if(pregnancyTime > expectedPregnancyTime)
+ if(pregnancyTime > mine.expectedPregnancyTime)
pregnancyReady = true;
}
age++;
- if(age > expectedAge)
+ if(age > mine.expectedAge)
health = 0;
}
void Creature::Priority()
{
- if(health < maxHealth/2){
+ if(health < mine.maxHealth / 2){
hungry = true;
able = false;
}
@@ -69,7 +56,7 @@ void Creature::Priority()
void Creature::setTarget()
{
- for(list <Entity*>::iterator it = N.begin(); it!=N.end(); it++){
+ for(std::list <Entity*>::iterator it = N.begin(); it!=N.end(); it++){
if( (*it)->getType() == RESOURCE_TYPE && hungry){
target = *it;
hasTarget = true;
@@ -93,7 +80,7 @@ void Creature::setTarget()
void Creature::checkTarget()
{
- for(list <Entity*>::iterator it = N.begin(); it!=N.end(); it++)
+ for(std::list <Entity*>::iterator it = N.begin(); it!=N.end(); it++)
if( target == *it )
return;
@@ -105,18 +92,18 @@ void Creature::checkTarget()
void Creature::Action()
{
if(hasTarget){
- if( Distance(rect,target->getRect()) < reach && target->getType() == RESOURCE_TYPE){
- target->eat(bite);
- health+=bite;
+ if( Distance(rect,target->getRect()) < mine.reach && target->getType() == RESOURCE_TYPE){
+ target->eat(mine.bite);
+ health+=mine.bite;
amountAte++;
- if(rect.w <= CREATURE_SIZE_MAX && amountToGrow <= amountAte){
+ if(rect.w <= mine.sizeMax && mine.amountToGrow <= amountAte){
amountAte = 0;
rect.w = rect.h = rect.w + 1;
}
if(target->getAmount()<=0)
hasTarget = false;
}
- else if( Distance(rect,target->getRect()) < reach && target->getType() == CREATURE_TYPE && target->getGender() != gender ){
+ else if( Distance(rect,target->getRect()) < mine.reach && target->getType() == CREATURE_TYPE && target->getGender() != gender ){
target->impregnate();
hasTarget = false;
}
@@ -124,7 +111,7 @@ void Creature::Action()
Move(target->getRect());
}
else if(wander){
- if(Distance(rect,wTarget) < reach)
+ if(Distance(rect,wTarget) < mine.reach)
wander = false;
else
Move(wTarget);
@@ -135,34 +122,34 @@ void Creature::Move(SDL_Rect R)
{
if( rect.x == R.x ){
if( rect.y < R.y )
- rect.y+=speed;
+ rect.y+=mine.speed;
else
- rect.y-=speed;
+ rect.y-=mine.speed;
}
else if( rect.y == R.y ){
if( rect.x < R.x )
- rect.x+=speed;
+ rect.x+=mine.speed;
else
- rect.x-=speed;
+ rect.x-=mine.speed;
}
else if( rect.x < R.x ){
if( rect.y < R.y ){
- rect.x+=speed;
- rect.y+=speed;
+ rect.x+=mine.speed;
+ rect.y+=mine.speed;
}
else{
- rect.x+=speed;
- rect.y-=speed;
+ rect.x+=mine.speed;
+ rect.y-=mine.speed;
}
}
else if ( rect.x > R.x ){
if( rect.y < R.y ){
- rect.x-=speed;
- rect.y+=speed;
+ rect.x-=mine.speed;
+ rect.y+=mine.speed;
}
else{
- rect.x-=speed;
- rect.y-=speed;
+ rect.x-=mine.speed;
+ rect.y-=mine.speed;
}
}
}