[Orxonox-commit 4098] r8769 - code/branches/ai2/src/orxonox/controllers

jo at orxonox.net jo at orxonox.net
Thu Jul 21 17:36:38 CEST 2011


Author: jo
Date: 2011-07-21 17:36:37 +0200 (Thu, 21 Jul 2011)
New Revision: 8769

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
   code/branches/ai2/src/orxonox/controllers/WaypointController.cc
   code/branches/ai2/src/orxonox/controllers/WaypointController.h
Log:
Moved intern waypoint functionallity from the waypointController to its base class ArtificialController. Further usage of this is planned.

Modified: code/branches/ai2/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/ai2/src/orxonox/controllers/AIController.cc	2011-07-20 21:27:53 UTC (rev 8768)
+++ code/branches/ai2/src/orxonox/controllers/AIController.cc	2011-07-21 15:36:37 UTC (rev 8769)
@@ -211,6 +211,13 @@
 
         float random;
         float maxrand = 100.0f / ACTION_INTERVAL;
+        if (this->waypoints_.size() > 0 && this->getControllableEntity() && this->mode_ == DEFAULT) //Waypoint functionality.
+        {
+            if (this->waypoints_[this->currentWaypoint_]->getWorldPosition().squaredDistance(this->getControllableEntity()->getPosition()) <= this->squaredaccuracy_)
+                this->currentWaypoint_ = (this->currentWaypoint_ + 1) % this->waypoints_.size();
+
+            this->moveToPosition(this->waypoints_[this->currentWaypoint_]->getWorldPosition());
+        }
         if(this->mode_ == DEFAULT)
 	    {
             if (this->state_ == MASTER)

Modified: code/branches/ai2/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/ai2/src/orxonox/controllers/ArtificialController.cc	2011-07-20 21:27:53 UTC (rev 8768)
+++ code/branches/ai2/src/orxonox/controllers/ArtificialController.cc	2011-07-21 15:36:37 UTC (rev 8769)
@@ -48,6 +48,7 @@
 #include "weaponsystem/WeaponPack.h"
 #include "weaponsystem/Weapon.h"
 #include "weaponsystem/WeaponSlot.h"
+#include "weaponsystem/WeaponSlot.h"
 
 namespace orxonox
 {
@@ -92,13 +93,17 @@
         this->bSetupWorked = false;
         this->botlevel_ = 0.5f;
         this->mode_ = DEFAULT;////Vector-implementation: mode_.push_back(DEFAULT);
-        this->timeout_=0;
+        this->timeout_ = 0;
+        this->currentWaypoint_ = 0;
+        this->setAccuracy(100);
     }
 
     ArtificialController::~ArtificialController()
     {
         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();
             this->removeFromFormation();
             this->weaponModes_.clear();
             for (ObjectList<ArtificialController>::iterator it = ObjectList<ArtificialController>::begin(); it; ++it)
@@ -1139,4 +1144,43 @@
         return -1;
     }
 
+    void ArtificialController::addWaypoint(WorldEntity* waypoint)
+    {
+        this->waypoints_.push_back(waypoint);
+    }
+
+    WorldEntity* ArtificialController::getWaypoint(unsigned int index) const
+    {
+        if (index < this->waypoints_.size())
+            return this->waypoints_[index];
+        else
+            return 0;
+    }
+
+    void ArtificialController::updatePointsOfInterest(std::string name, float distance)
+    {
+        WorldEntity* waypoint = NULL;
+        if(name == "Pickup")
+        {
+            for (ObjectList<WorldEntity>::iterator it = ObjectList<WorldEntity>::begin(); it != ObjectList<WorldEntity>::end(); ++it)
+            {
+                //get POI by string: Possible POIs are PICKUPSPAWNER, FORCEFIELDS (!analyse!), ...
+                //if(it->isA(Pickupable)) //distance to POI decides wether it is added (neither too close nor too far away)
+                //To Think: how should POI's be managed? (e.g. if there are no real moving target or if the can be taken "en passant".)
+                   waypoint = *it;
+                /*const Vector3 realDistance = it->getPosition() - this->getControllableEntity()->getPosition();
+                if( realDistance.length() < distance)
+                {
+                    float minDistance = it->getTriggerDistance().length()*it->getTriggerDistance().length();
+                    if(this->squaredaccuracy_ > minDistance)
+                        this->squaredaccuracy_ = minDistance;
+                    //waypoint = static_cast<WorldEntity*>(it);
+                    break;
+               // }*/
+            }
+        }
+        if(waypoint)
+            this->waypoints_.push_back(waypoint);
+    }
+
 }

Modified: code/branches/ai2/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/branches/ai2/src/orxonox/controllers/ArtificialController.h	2011-07-20 21:27:53 UTC (rev 8768)
+++ code/branches/ai2/src/orxonox/controllers/ArtificialController.h	2011-07-21 15:36:37 UTC (rev 8769)
@@ -83,7 +83,16 @@
             inline float getBotLevel() const
                 { return this->botlevel_; }
             static void setAllBotLevel(float level);
+            //WAYPOINT FUNCTIONS
+            void addWaypoint(WorldEntity* waypoint);
+            WorldEntity* getWaypoint(unsigned int index) const;
 
+            inline void setAccuracy(float accuracy)
+                { this->squaredaccuracy_ = accuracy*accuracy; }
+            inline float getAccuracy() const
+                { return sqrt(this->squaredaccuracy_); }
+            void updatePointsOfInterest(std::string name, float distance);
+
         protected:
 
             int team_;
@@ -148,17 +157,23 @@
             WeakPtr<Pawn> target_;
             bool bShooting_;
 
-            std::map<std::string, int> weaponModes_; //<! Links each "weapon" to it's weaponmode- managed by setupWeapons()
-            //std::vector<int> projectiles_; //<! Displays amount of projectiles of each weapon. - managed by setupWeapons()
             float botlevel_; //<! Makes the level of a bot configurable.
-            float timeout_; //<! Timeout for rocket usage. (If a rocket misses, a bot should stop using it.)
-
             enum Mode {DEFAULT, ROCKET, DEFENCE, MOVING};//TODO; implement DEFENCE, MOVING modes
             Mode mode_; //TODO: replace single value with stack-like implementation: std::vector<Mode> mode_;
             void setPreviousMode();
+
+            //WEAPONSYSTEM DATA
+            std::map<std::string, int> weaponModes_; //<! Links each "weapon" to it's weaponmode- managed by setupWeapons()
+            //std::vector<int> projectiles_; //<! Displays amount of projectiles of each weapon. - managed by setupWeapons()
+            float timeout_; //<! Timeout for rocket usage. (If a rocket misses, a bot should stop using it.)
             void setupWeapons(); //<! Defines which weapons are available for a bot. Is recalled whenever a bot was killed.
             bool bSetupWorked; //<! If false, setupWeapons() is called.
             int getFiremode(std::string name);
+
+            //WAYPOINT DATA
+            std::vector<WorldEntity*> waypoints_;
+            size_t currentWaypoint_;
+            float squaredaccuracy_;
     };
 }
 

Modified: code/branches/ai2/src/orxonox/controllers/WaypointController.cc
===================================================================
--- code/branches/ai2/src/orxonox/controllers/WaypointController.cc	2011-07-20 21:27:53 UTC (rev 8768)
+++ code/branches/ai2/src/orxonox/controllers/WaypointController.cc	2011-07-21 15:36:37 UTC (rev 8769)
@@ -39,26 +39,18 @@
     WaypointController::WaypointController(BaseObject* creator) : ArtificialController(creator)
     {
         RegisterObject(WaypointController);
-
-        this->currentWaypoint_ = 0;
-        this->setAccuracy(100);
     }
 
     WaypointController::~WaypointController()
     {
-        if (this->isInitialized())
-        {
-            for (size_t i = 0; i < this->waypoints_.size(); ++i)
-                this->waypoints_[i]->destroy();
-        }
     }
 
     void WaypointController::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(WaypointController, XMLPort, xmlelement, mode);
 
-        XMLPortParam(WaypointController, "accuracy", setAccuracy, getAccuracy, xmlelement, mode).defaultValues(100.0f);
-        XMLPortObject(WaypointController, WorldEntity, "waypoints", addWaypoint, getWaypoint,  xmlelement, mode);
+        XMLPortParam(ArtificialController, "accuracy", setAccuracy, getAccuracy, xmlelement, mode).defaultValues(100.0f);
+        XMLPortObject(ArtificialController, WorldEntity, "waypoints", addWaypoint, getWaypoint,  xmlelement, mode);
     }
 
     void WaypointController::tick(float dt)
@@ -75,16 +67,4 @@
         this->moveToPosition(this->waypoints_[this->currentWaypoint_]->getWorldPosition());
     }
 
-    void WaypointController::addWaypoint(WorldEntity* waypoint)
-    {
-        this->waypoints_.push_back(waypoint);
-    }
-
-    WorldEntity* WaypointController::getWaypoint(unsigned int index) const
-    {
-        if (index < this->waypoints_.size())
-            return this->waypoints_[index];
-        else
-            return 0;
-    }
 }

Modified: code/branches/ai2/src/orxonox/controllers/WaypointController.h
===================================================================
--- code/branches/ai2/src/orxonox/controllers/WaypointController.h	2011-07-20 21:27:53 UTC (rev 8768)
+++ code/branches/ai2/src/orxonox/controllers/WaypointController.h	2011-07-21 15:36:37 UTC (rev 8769)
@@ -46,18 +46,8 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
             virtual void tick(float dt);
 
-            void addWaypoint(WorldEntity* waypoint);
-            WorldEntity* getWaypoint(unsigned int index) const;
-
-            inline void setAccuracy(float accuracy)
-                { this->squaredaccuracy_ = accuracy*accuracy; }
-            inline float getAccuracy() const
-                { return sqrt(this->squaredaccuracy_); }
-
         protected:
-            std::vector<WorldEntity*> waypoints_;
-            size_t currentWaypoint_;
-            float squaredaccuracy_;
+
     };
 }
 




More information about the Orxonox-commit mailing list