diff options
author | tom <tom@ground-control> | 2016-05-02 22:02:25 -0500 |
---|---|---|
committer | tom <tom@ground-control> | 2016-05-02 22:02:25 -0500 |
commit | e7cac5098145d75a680e35787f7c504caf16965b (patch) | |
tree | 8256bd87b35c5aadcef0e5bd16030a4196cbbc7e /src | |
parent | 8d9ad3eb74bc0dfc647abf03b7b99ed16f2a9115 (diff) |
fixed issue, was related to erasing nodes within vectors while using iterators
Diffstat (limited to 'src')
-rw-r--r-- | src/creature.cpp | 15 | ||||
-rw-r--r-- | src/list.cpp | 16 |
2 files changed, 16 insertions, 15 deletions
diff --git a/src/creature.cpp b/src/creature.cpp index 24508bf..3ae02ce 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -13,14 +13,12 @@ Creature::Creature(Window m, std::string s) type = 1; hasTarget = false; - wandering = false; able = true; - n=0; } void Creature::Behavior() { - //health-=1; + health-=1; this->Priority(); @@ -29,11 +27,10 @@ void Creature::Behavior() void Creature::Priority() { - for(vector <Entity*>::iterator it = N.begin(); it!=N.end(); it++){ - if((*it)->getType() == 2){ + for(list <Entity*>::iterator it = N.begin(); it!=N.end(); it++){ + if((*it)->getType() == 2){ if(!hasTarget){ target = *it; - wandering = false; hasTarget = true; } else @@ -44,14 +41,18 @@ void Creature::Priority() void Creature::Action() { + //cout << "My coords:" << L.x << "," << L.y << endl; + cout << "Mytcoords:" << target->getLocation().x << "," << target->getLocation().y << endl << endl; if(hasTarget){ if(Distance(L,target->getLocation())<5){ target->eat(); health+=1000; } - if(target->getAmount()==0) + if(target->getAmount()==0){ hasTarget = false; + cout << "done\n"; + } } //Makes moves towards target coordinates diff --git a/src/list.cpp b/src/list.cpp index ff9722f..5d8ae35 100644 --- a/src/list.cpp +++ b/src/list.cpp @@ -21,10 +21,10 @@ List::List(Window m) void List::Place() { - for(vector<Creature>::iterator it = C.begin(); it!=C.end(); it++) + for(list<Creature>::iterator it = C.begin(); it!=C.end(); it++) it->Place(); - for(vector<Resource>::iterator it = R.begin(); it!=R.end(); it++){ + for(list<Resource>::iterator it = R.begin(); it!=R.end(); it++){ if(it->getAmount()<=0) R.erase(it--); else @@ -34,9 +34,9 @@ void List::Place() void List::Behavior() { - for(vector<Creature>::iterator it = C.begin(); it!=C.end(); it++){ + for(list<Creature>::iterator it = C.begin(); it!=C.end(); it++){ - vector<Entity*> N = getNear(*it); + list<Entity*> N = getNear(*it); it->giveN(N); it->Behavior(); @@ -50,16 +50,16 @@ void List::Behavior() } } -vector<Entity*> List::getNear(Creature nC) +list<Entity*> List::getNear(Creature nC) { - vector<Entity*> N; + list<Entity*> N; - for(vector <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.getLocation(),it->getLocation()) ) N.push_back(&(*it)); } - for(vector <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.getLocation(),it->getLocation()) ) |