[Orxonox-commit 1979] r6696 - code/branches/ai/src/orxonox/controllers
solex at orxonox.net
solex at orxonox.net
Mon Apr 12 16:52:01 CEST 2010
Author: solex
Date: 2010-04-12 16:52:01 +0200 (Mon, 12 Apr 2010)
New Revision: 6696
Modified:
code/branches/ai/src/orxonox/controllers/AIController.cc
code/branches/ai/src/orxonox/controllers/ArtificialController.cc
code/branches/ai/src/orxonox/controllers/ArtificialController.h
Log:
Master now limiting its formation size and revokes it with a probability based on its size
Modified: code/branches/ai/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/ai/src/orxonox/controllers/AIController.cc 2010-04-12 14:18:12 UTC (rev 6695)
+++ code/branches/ai/src/orxonox/controllers/AIController.cc 2010-04-12 14:52:01 UTC (rev 6696)
@@ -76,9 +76,20 @@
if (this->state_ == MASTER)//MASTER
{
+
// command slaves
this->commandSlaves();
+
+ // lose master status (only if less than 4 slaves in formation)
+ random = rnd(maxrand);
+ if(random < 5/(this->slaves.size()+1) && this->slaves.size() < 5 )
+ this->loseMasterState();
+
+ // look out for outher masters if formation is small
+ if(this->slaves.size() < 3)
+ this->searchNewMaster();
+
// search enemy
random = rnd(maxrand);
if (random < 15 && (!this->target_))
Modified: code/branches/ai/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/ai/src/orxonox/controllers/ArtificialController.cc 2010-04-12 14:18:12 UTC (rev 6695)
+++ code/branches/ai/src/orxonox/controllers/ArtificialController.cc 2010-04-12 14:52:01 UTC (rev 6696)
@@ -131,9 +131,15 @@
//is pawn oneself? && is pawn in range?
if (static_cast<ControllableEntity*>(*it) != this->getControllableEntity()) //&& it->getPosition().squaredDistance(this->getControllableEntity()->getPosition()) < 1000
{
+ if(controller->slaves.size() > 9) continue;
+
+ this->freeAllSlaves();
+ this->slaves.clear();
this->state_ = SLAVE;
+
this->myMaster_ = controller;
controller->slaves.push_back(this);
+
break;
}
}//for
@@ -169,6 +175,12 @@
void ArtificialController::freeAllSlaves()
{
+
+ for(std::list<ArtificialController*>::iterator it = slaves.begin(); it != slaves.end(); it++)
+ {
+ (*it)->state_ = FREE;
+ }
+/*
for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
{
ArtificialController *controller = static_cast<ArtificialController*>(it->getController());
@@ -177,10 +189,15 @@
controller->state_ = FREE;
}
+*/
+ }
+ void ArtificialController::loseMasterState()
+ {
+ this->freeAllSlaves();
+ this->state_ = FREE;
}
-
void ArtificialController::setTargetPosition(const Vector3& target)
{
this->targetPosition_ = target;
Modified: code/branches/ai/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/branches/ai/src/orxonox/controllers/ArtificialController.h 2010-04-12 14:18:12 UTC (rev 6695)
+++ code/branches/ai/src/orxonox/controllers/ArtificialController.h 2010-04-12 14:52:01 UTC (rev 6696)
@@ -65,6 +65,7 @@
void searchNewMaster();
void commandSlaves();
void freeAllSlaves();
+ void loseMasterState();
ArtificialController *myMaster_;
More information about the Orxonox-commit
mailing list