diff options
author | Tom Barrett <tombarrett@siu.edu> | 2017-03-12 11:07:22 -0500 |
---|---|---|
committer | Tom Barrett <tombarrett@siu.edu> | 2017-03-12 11:07:22 -0500 |
commit | 836f56a40fa4a2b8e68c23b2c299e50fefe0c15d (patch) | |
tree | 56ca750d4f2c93b5a72d52fd7c1d4b575b3c061a /src/organism.cpp | |
parent | 8f5a73f1daba39c8b0175036cf688f8ce1399a8f (diff) |
-renamed constants to fit new datatypes
-reimplemented corpses
-implemented hunger and starving (if creature is starving they will eat corpses and will take damage)
-removed sides data from dna (think it is irrelavent)
-removed data from dna that is not used for plants
Diffstat (limited to 'src/organism.cpp')
-rw-r--r-- | src/organism.cpp | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/src/organism.cpp b/src/organism.cpp index 93e2041..c3ec992 100644 --- a/src/organism.cpp +++ b/src/organism.cpp @@ -6,14 +6,16 @@ Organism::Organism(Rectangle r, DNA d) myDNA = d; if(rect.x == 0 && rect.y == 0){ - rect.x = getRandom(30); - rect.y = getRandom(30); + rect.x = getRandom(BOUNDS); + rect.y = getRandom(BOUNDS); } + hunger = 50; health = myDNA.maxHealth/2; gender = rand() % 2; age = 0; pregnancyTime = 0; + able = false; pregnancyReady = false; pregnate = false; hasTarget = false; @@ -22,8 +24,6 @@ Organism::Organism(Rectangle r, DNA d) void Organism::Behavior() { - health-=1; - this->Priority(); if(!hasTarget) @@ -42,17 +42,30 @@ void Organism::Behavior() age++; if(age > myDNA.expectedAge) health = 0; + + hunger++; + if(starving) + health-=1; + if(able) + health+=1; } void Organism::Priority() { - if(health < myDNA.maxHealth / 2){ - hungry = true; - able = false; + if(hunger > myDNA.hungryAmount){ + starving=false; + hungry = true; + able = false; + } + else if(hunger > myDNA.starveAmount){ + hungry = true; + starving= true; + able = false; } else{ - hungry = false; - able = true; + hungry = false; + starving= false; + able = true; } } @@ -61,7 +74,7 @@ void Organism::setTarget() std::random_shuffle(nearMe.begin(),nearMe.end()); for(std::vector<Organism*>::iterator it = nearMe.begin(); it!=nearMe.end(); it++){ - if( (*it)->getType() == myDNA.eatType && hungry){ + if( ((*it)->getType() == myDNA.eatType && hungry) || ((*it)->getType() == CORPSE_TYPE && starving) ){ target = *it; hasTarget = true; wander = false; @@ -77,7 +90,7 @@ void Organism::setTarget() if(!hasTarget&&!wander){ wander = true; - Rectangle tmp(getRandom(30),getRandom(30),0,0); + Rectangle tmp(getRandom(BOUNDS),getRandom(BOUNDS),0,0); wTarget = tmp; } } @@ -95,9 +108,9 @@ void Organism::Action() { if(hasTarget){ if(Distance(rect,target->getRectangle()) < myDNA.reach){ - if(target->getType() == myDNA.eatType){ + if( (target->getType() == myDNA.eatType) || (target->getType() == CORPSE_TYPE) ){ target->takeBite(myDNA.bite); - health+=myDNA.bite; + hunger-=myDNA.bite; if(target->getHealth()<=0) hasTarget = false; } @@ -107,7 +120,6 @@ void Organism::Action() } hasTarget = false; } - } else moveTowards(target->getRectangle()); |