Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 24, 2015, 5:21:03 PM (9 years ago)
Author:
gania
Message:

major change: introduced Actionpoints, look AITest.oxw. Only FLY works for now

Location:
code/branches/campaignHS15/src/orxonox/controllers
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • code/branches/campaignHS15/src/orxonox/controllers/CommonController.cc

    r10848 r10849  
    5858    CommonController::CommonController( Context* context ): Controller( context )
    5959    {
    60         this->action_ = Action::FLY;
     60        this->squaredaccuracy_ = 500;
     61        this->action_ = Action::NONE;
    6162        this->stopLookingAtTarget();
    62         this->attackRange_ = 2500;
     63        this->attackRange_ = 800;
    6364        RegisterObject( CommonController );
    6465    }
     
    6970        //orxout(internal_error) << "I died, my Rank is " << rank_ << endl;
    7071    }
    71     void CommonController::backupAction()
    72     {
    73         this->actionpoints_.push_back (this->currentActionpoint_);
    74     }
    75     void CommonController::restoreAction()
    76     {
    77         this->currentActionpoint_ = this->actionpoints_.back();
    78         this->actionpoints_.pop_back();
    79     }
    80     void CommonController::popAction()
    81     {
    82         this->currentActionpoint_ = actionpoints_.back();
    83         actionpoints_.pop_back();
    84     }
    85 
     72   
     73 
    8674    void CommonController::XMLPort( Element& xmlelement, XMLPort::Mode mode )
    8775    {
     
    120108        if (!this->getProtect())
    121109            return "noProtectWasSet";
    122         return CommonController::getName (this->getProtect());
     110        return CommonController::getName (orxonox_cast<Pawn*>(this->getProtect()));
    123111    }
    124112    std::string CommonController::getName(Pawn* entity)
     
    256244    {
    257245        this->action_ = action;
    258         if (action == Action::FIGHT)
     246        if (action == Action::FIGHT || action == Action::FIGHTALL || action == Action::ATTACK)
    259247        {   
    260248            if (target)
     
    334322            }
    335323            else
    336                 ThrowException( ParseError, std::string( "Attempting to set an unknown Action: '" )+ val + "'." );
     324                ThrowException( ParseError, std::string( "Attempting to set an unknown Action: '" )+ actionName + "'." );
    337325            //this->setAction( value );
    338             parsedActionpoints_.push_back( std::make_tuple (value, targetName, position) );
    339         }
    340         else
    341         {
    342             parsedActionpoints_.push_back(
    343                 std::make_tuple (Action::FLY, "", actionpoint->getWorldPosition()) );
     326            Point p = { value, targetName, position };
     327            parsedActionpoints_.push_back(p);
     328            orxout(internal_error) << "Pushed " << p.action << endl;
     329        }
     330        else
     331        {
     332            Point p = { Action::FLY, "", actionpoint->getWorldPosition() };
     333            parsedActionpoints_.push_back(p);
    344334        }
    345335            this->actionpoints_.push_back(actionpoint);
     
    357347    void CommonController::setClosestTarget()
    358348    {
    359         this->setTarget (closestTarget());
    360     }
    361     ControllableEntity* CommonController::closestTarget()
     349        this->setTarget (static_cast<ControllableEntity*>( closestTarget() ) );
     350    }
     351    Pawn* CommonController::closestTarget()
    362352    {
    363353        if (!this->getControllableEntity())
     
    381371        if (closestTarget)
    382372        {
    383            return static_cast<ControllableEntity*>(closestTarget);
     373           return closestTarget;
    384374        }
    385375        return 0; 
     
    391381        if (!this->parsedActionpoints_.empty())
    392382        {
    393             this->action_ = std::get<0>( this->parsedActionpoints_.back() );
     383            this->action_ = this->parsedActionpoints_.back().action;
    394384
    395385            switch ( this->action_ )
     
    401391                case Action::FLY:
    402392                {
    403                     this->setTargetPosition(std::get<2>( this->parsedActionpoints_.back() ));
     393                    this->setTargetPosition( this->parsedActionpoints_.back().position );
    404394                    if (this->squaredDistanceToTarget() <= this->squaredaccuracy_)
    405395                    {
     
    411401                case Action::PROTECT:
    412402                {
    413                     std::string protectName = std::get<1>( this->parsedActionpoints_.back() );
     403                    std::string protectName = this->parsedActionpoints_.back().name;
    414404
    415405                    for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
     
    437427                case Action::ATTACK:
    438428                {
    439                     std::string targetName = std::get<1>( this->parsedActionpoints_.back() );
     429                    std::string targetName = this->parsedActionpoints_.back().name;
    440430
    441431                    for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
     
    443433                        if (CommonController::getName(*itP) == targetName)
    444434                        {
     435                            orxout(internal_error) << "Attacking" << endl;
    445436                            this->setTarget (static_cast<ControllableEntity*>(*itP));
    446437                        }
     
    465456            this->action_ = Action::NONE;
    466457        }
     458        orxout(internal_error) << "Executing action " << this->getActionXML() << endl;
    467459    }
    468460    void CommonController::nextActionpoint()
  • code/branches/campaignHS15/src/orxonox/controllers/CommonController.h

    r10848 r10849  
    6565            NONE, FLY, FIGHT, PROTECT, FIGHTALL, ATTACK
    6666        };
     67       
    6768    }
     69   
     70    struct Point {
     71        Action::Value action;
     72        std::string name;
     73        Vector3 position;
     74    } ;
     75
     76
     77   
    6878 
    6979
     
    171181                void doFire();
    172182                void setClosestTarget();
    173                 ControllableEntity* closestTarget();
     183                Pawn* closestTarget();
    174184
    175185                bool bShooting_;
     
    200210                std::vector<WeakPtr<WorldEntity> > actionpoints_;
    201211                float squaredaccuracy_;
    202                 <tuple<Action::Value ,std::string ,Vector3 > > currentActionpoint_;
    203                 std::vector<tuple<Action::Value ,std::string ,Vector3 > > parsedActionpoints_;
     212                Point  currentActionpoint_;
     213                std::vector<Point > parsedActionpoints_;
     214                void executeActionpoint();
     215                void nextActionpoint();
    204216            //----[/Actionpoint information]----
    205217            //----["Private" variables]----
  • code/branches/campaignHS15/src/orxonox/controllers/DivisionController.cc

    r10848 r10849  
    2828
    2929#include "DivisionController.h"
    30 
     30#include "infos/PlayerInfo.h"
    3131
    3232namespace orxonox
     
    9393        if (this->action_ != Action::FIGHT && this->action_ != Action::FIGHTALL)
    9494        {
    95             if ((this->target_ && CommonController::distance (this->getControllableEntity(), this->target_) > this->attackRange_) ||
    96              !this->target_)
    97             {
    98                 ControllableEntity* newTarget = this->closestTarget();
     95            if ( (this->target_ && CommonController::distance (this->getControllableEntity(), this->target_) > this->attackRange_)
     96                || !this->target_ )
     97            {
     98                Pawn* newTarget = this->closestTarget();
    9999                if ( newTarget &&
    100                     CommonController::distance (this->getControllableEntity(), newTarget) < this->attackRange_ )
     100                    CommonController::distance (this->getControllableEntity(), static_cast<ControllableEntity*>(newTarget))
     101                        <= this->attackRange_ )
    101102                {
    102103                    // this->backupAction();
    103104                    // this->setAction (Action::FIGHT, newTarget);
    104                     this->parsedActionpoints_.push_back(
    105                         std::make_tuple (Action::FIGHT, CommonController::getName(newTarget), Vector3::ZERO) );
     105                    Point p = { Action::FIGHT, CommonController::getName(newTarget), Vector3::ZERO };
     106                    this->parsedActionpoints_.push_back(p);
     107                    this->executeActionpoint();
    106108                }
    107109            }
     
    113115        if (this->action_ == Action::NONE)
    114116        {
    115 
    116         }
    117 
    118         this->executeActionpoint();
     117            this->executeActionpoint();
     118        }
     119
    119120
    120121        //this->action_ is what I am actually executing, this->target_ is what I am
     
    142143                else if (this->action_ == Action::FIGHTALL)
    143144                {
    144                     if (newTarget)
     145                    if (newTarget && newTarget->getController())
    145146                    {
    146147                        this->setAction (Action::FIGHTALL, newTarget);
     
    158159                //----fly in formation if far enough----
    159160                Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
     161               
     162                   
    160163                if (diffVector.length() > this->attackRange_)
    161164                {
     
    198201        else if (this->action_ == Action::FLY)
    199202        {
     203
     204            if (this->squaredDistanceToTarget() <= this->squaredaccuracy_)
     205            {
     206                orxout(internal_error) << "arrived";
     207                this->nextActionpoint();
     208                return;
     209            }
    200210            this->setTargetPositionOfWingman();
    201211            this->setTargetPositionOfFollower();
     
    203213        else if (this->action_ == Action::PROTECT)
    204214        {
     215            if (!this->getProtect())
     216            {
     217                this->nextActionpoint();
     218                return;
     219            }
    205220           /* if (this->myWingman_)
    206221                this->myWingman_->setAction (Action::PROTECT, this->getProtect());
     
    218233            this->setTargetPositionOfWingman();
    219234            this->setTargetPositionOfFollower();
     235
    220236        }
    221237        else if (this->action_ == Action::ATTACK)
    222238        {   
    223             if (this->hasTarget())
    224             {
    225                 //----fly in formation if far enough----
    226                 Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
    227                 if (diffVector.length() > this->attackRange_)
    228                 {
    229                     this->setTargetPositionOfWingman();
    230                     this->setTargetPositionOfFollower();                   
    231                 }
    232                 else
    233                 {
    234                     //----wingmans shall support the fire of their leaders----
    235                     if (this->myWingman_)
    236                     {
    237                         this->myWingman_->setAction (this->action_, this->target_);     
    238                     }
    239                     if (this->myFollower_)
    240                     {
    241                         this->myFollower_->setAction (this->action_);                                   
    242                     }
    243 
    244                 }
    245                
    246             }
    247             if (this->hasTarget())
    248             {
    249                 //----choose where to go----
    250                 this->maneuver();
    251                 //----fire if you can----
    252                 this->bShooting_ = this->canFire();               
    253             }
     239            if (!this->hasTarget())
     240            {
     241                this->nextActionpoint();
     242                return;
     243            }
     244            //----fly in formation if far enough----
     245            Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
     246            if (diffVector.length() > this->attackRange_)
     247            {
     248                this->setTargetPositionOfWingman();
     249                this->setTargetPositionOfFollower();                   
     250            }
     251            else
     252            {
     253                //----wingmans shall support the fire of their leaders----
     254                if (this->myWingman_)
     255                {
     256                    this->myWingman_->setAction (this->action_, this->target_);     
     257                }
     258                if (this->myFollower_)
     259                {
     260                    this->myFollower_->setAction (this->action_);                                   
     261                }
     262
     263            }
     264           
     265            //----choose where to go----
     266            this->maneuver();
     267            //----fire if you can----
     268            this->bShooting_ = this->canFire();               
    254269        }
    255270
Note: See TracChangeset for help on using the changeset viewer.