[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