[Orxonox-commit 4121] r8792 - code/branches/ai2/src/orxonox/controllers
jo at orxonox.net
jo at orxonox.net
Wed Jul 27 21:21:30 CEST 2011
Author: jo
Date: 2011-07-27 21:21:29 +0200 (Wed, 27 Jul 2011)
New Revision: 8792
Modified:
code/branches/ai2/src/orxonox/controllers/AIController.cc
code/branches/ai2/src/orxonox/controllers/ArtificialController.cc
code/branches/ai2/src/orxonox/controllers/ArtificialController.h
Log:
Yeay, works. The pickuping efficiency isn't as good as expected though.
Modified: code/branches/ai2/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/ai2/src/orxonox/controllers/AIController.cc 2011-07-26 21:41:45 UTC (rev 8791)
+++ code/branches/ai2/src/orxonox/controllers/AIController.cc 2011-07-27 19:21:29 UTC (rev 8792)
@@ -240,9 +240,13 @@
{
WorldEntity* wPoint = this->waypoints_[this->waypoints_.size()-1];
if(wPoint)
+ {
this->moveToPosition(wPoint->getWorldPosition()); //BUG ?? sometime wPoint->getWorldPosition() causes crash
- if (wPoint->getWorldPosition().squaredDistance(controllable->getPosition()) <= this->squaredaccuracy_)
- this->waypoints_.pop_back(); // if goal is reached, remove it from the list
+ if (wPoint->getWorldPosition().squaredDistance(controllable->getPosition()) <= this->squaredaccuracy_)
+ this->waypoints_.pop_back(); // if goal is reached, remove it from the list
+ }
+ else
+ this->waypoints_.pop_back(); // remove invalid waypoints
}
else if(this->defaultWaypoint_ && ((this->defaultWaypoint_->getPosition()-controllable->getPosition()).length() > 200.0f))
Modified: code/branches/ai2/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/ai2/src/orxonox/controllers/ArtificialController.cc 2011-07-26 21:41:45 UTC (rev 8791)
+++ code/branches/ai2/src/orxonox/controllers/ArtificialController.cc 2011-07-27 19:21:29 UTC (rev 8792)
@@ -104,7 +104,11 @@
if (this->isInitialized())
{//Vector-implementation: mode_.erase(mode_.begin(),mode_.end());
for (size_t i = 0; i < this->waypoints_.size(); ++i)
- this->waypoints_[i]->destroy();
+ {
+ if(this->waypoints_[i])
+ this->waypoints_[i]->destroy();
+ }
+ //this->waypoints_.clear();
this->removeFromFormation();
this->weaponModes_.clear();
for (ObjectList<ArtificialController>::iterator it = ObjectList<ArtificialController>::begin(); it; ++it)
@@ -1195,7 +1199,7 @@
void ArtificialController::manageWaypoints()
{
if(!defaultWaypoint_)
- this->updatePointsOfInterest("PickupSpawner", 60.0f); // long search radius if there is no default goal
+ this->updatePointsOfInterest("PickupSpawner", 200.0f); // long search radius if there is no default goal
else
this->updatePointsOfInterest("PickupSpawner", 20.0f); // take pickup en passant if there is a default waypoint
}
Modified: code/branches/ai2/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/branches/ai2/src/orxonox/controllers/ArtificialController.h 2011-07-26 21:41:45 UTC (rev 8791)
+++ code/branches/ai2/src/orxonox/controllers/ArtificialController.h 2011-07-27 19:21:29 UTC (rev 8792)
@@ -172,7 +172,7 @@
int getFiremode(std::string name);
//WAYPOINT DATA
- std::vector<WorldEntity*> waypoints_;
+ std::vector<WeakPtr<WorldEntity> > waypoints_;
size_t currentWaypoint_;
float squaredaccuracy_;
WorldEntity* defaultWaypoint_;
More information about the Orxonox-commit
mailing list