[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