Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10856


Ignore:
Timestamp:
Nov 25, 2015, 2:05:43 PM (8 years ago)
Author:
gania
Message:

fixed loops

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

Legend:

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

    r10855 r10856  
    11201120        }
    11211121    }
     1122    void CommonController::takeActionpoints (std::vector<Point > vector, std::vector<Point > loop, bool b)
     1123    {
     1124      this->parsedActionpoints_ = vector;
     1125      this->loopActionpoints_ = loop;
     1126      this->bLoop_ = b;
     1127      this->setAction (Action::NONE);
     1128      this->setTarget(0);
     1129      this->setTargetPosition (this->getControllableEntity()->getWorldPosition());
     1130      orxout(internal_error) << "Top action is " << this->parsedActionpoints_.back().action << endl;
     1131    }
     1132    void CommonController::boostControl()
     1133    {
     1134        SpaceShip* ship = orxonox_cast<SpaceShip*>(this->getControllableEntity());
     1135        if(ship == NULL) return;
     1136        if(ship->getBoostPower()*1.5f > ship->getInitialBoostPower() ) //upper limit ->boost
     1137        {
     1138
     1139            this->getControllableEntity()->boost(true);
     1140        }
     1141        else if(ship->getBoostPower()*4.0f < ship->getInitialBoostPower()) //lower limit ->do not boost
     1142        {
     1143           this->getControllableEntity()->boost(false);
     1144        }
     1145    }
    11221146}
  • code/branches/campaignHS15/src/orxonox/controllers/CommonController.h

    r10855 r10856  
    156156                void setTargetOrientation(const Quaternion& orient);
    157157                void setTargetOrientation(ControllableEntity* target);
     158                virtual void boostControl();
    158159
    159160
     
    227228                bool bInLoop_;
    228229                bool bLoop_;                   
    229             //----[/"Private" variables]----               
     230            //----[/"Private" variables]----   
     231        virtual void takeActionpoints (std::vector<Point > vector, std::vector<Point > loop, bool b);
     232           
    230233    };
    231234}
  • code/branches/campaignHS15/src/orxonox/controllers/DivisionController.cc

    r10855 r10856  
    5252        if (this->myFollower_)
    5353        {
    54             this->myFollower_->takeActionpoints(this->parsedActionpoints_);
     54            this->myFollower_->takeActionpoints(this->parsedActionpoints_, this->loopActionpoints_, this->bLoop_);
     55        }
     56        else if (this->myWingman_)
     57        {
     58            this->myWingman_->takeActionpoints(this->parsedActionpoints_, this->loopActionpoints_, this->bLoop_);
    5559        }
    5660        for (size_t i = 0; i < this->actionpoints_.size(); ++i)
     
    8286    {
    8387        CommonController::stayNearProtect();
    84     }
    85     void DivisionController::setTargetPositionOfWingman()
    86     {
    87         if (!this->myWingman_)
    88             return;
    89         Vector3* targetRelativePositionOfWingman;
    90         switch (this->formationMode_){
    91             case FormationMode::WALL:
    92             {
    93                 targetRelativePositionOfWingman = new Vector3 (400, 0, 0); 
    94                 break;
    95             }
    96             case FormationMode::FINGER4:
    97             {
    98                 targetRelativePositionOfWingman = new Vector3 (400, 0, 200); 
    99                 break;
    100             }
    101          
    102             case FormationMode::DIAMOND:
    103             {
    104                 targetRelativePositionOfWingman = new Vector3 (400, 0, 200);                 
    105                 break;
    106             }
    107         }
    108         Quaternion orient = this->getControllableEntity()->getWorldOrientation();
    109        
    110         Vector3 targetAbsolutePositionOfWingman = ((this->getControllableEntity()->getWorldPosition()) +
    111         (this->getControllableEntity()->getWorldOrientation()* (*targetRelativePositionOfWingman)));
    112        
    113         myWingman_->setAction( Action::FLY, targetAbsolutePositionOfWingman, orient);
    114        
    11588    }
    11689   
  • code/branches/campaignHS15/src/orxonox/controllers/DivisionController.h

    r10854 r10856  
    5656                virtual bool hasWingman();
    5757                virtual bool hasFollower();
    58 
    59                 void setTargetPositionOfWingman();
    6058               
    6159            //----[/own functions]----
  • code/branches/campaignHS15/src/orxonox/controllers/LeaderController.cc

    r10854 r10856  
    5151    {
    5252    }
    53     void LeaderController::takeActionpoints (std::vector<Point > vector)
    54     {
    55       this->parsedActionpoints_ = vector;
    56       this->setAction (Action::NONE);
    57       this->setTarget(0);
    58       this->setTargetPosition (this->getControllableEntity()->getWorldPosition());
    59       orxout(internal_error) << "Top action is " << this->parsedActionpoints_.back().action << endl;
    60     }
     53   
    6154
    6255
  • code/branches/campaignHS15/src/orxonox/controllers/LeaderController.h

    r10854 r10856  
    5353                    { return true; }
    5454            //----[/pseudo virtual methods]----
    55                 virtual void takeActionpoints (std::vector<Point > vector);
    5655
    5756
  • code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc

    r10854 r10856  
    5151    SectionController::~SectionController()
    5252    {
     53        if (this->myWingman_)
     54        {
     55            this->myWingman_->takeActionpoints(this->parsedActionpoints_, this->loopActionpoints_, this->bLoop_);
     56        }
    5357       for (size_t i = 0; i < this->actionpoints_.size(); ++i)
    5458        {
     
    151155    }
    152156
    153     void SectionController::boostControl()
    154     {
    155         SpaceShip* ship = orxonox_cast<SpaceShip*>(this->getControllableEntity());
    156         if(ship == NULL) return;
    157         if(ship->getBoostPower()*1.5f > ship->getInitialBoostPower() ) //upper limit ->boost
    158         {
    159 
    160             this->getControllableEntity()->boost(true);
    161         }
    162         else if(ship->getBoostPower()*4.0f < ship->getInitialBoostPower()) //lower limit ->do not boost
    163         {
    164            this->getControllableEntity()->boost(false);
    165         }
    166     }
     157   
    167158    //PRE: myDivisionLeader_ != 0 && myDivisionLeader_->action_ == Action::FIGHT
    168159    //POST: this->target_ is set unless division leader doesn't have one
     
    250241    }
    251242
    252     //----stay in formation----
    253     //gani-TODO: sum targetAbso... and this->predicted position
    254     void SectionController::setTargetPositionOfWingman()
    255     {
    256         if (!this->myWingman_)
    257             return;
    258         Vector3* targetRelativePositionOfWingman;
    259         switch (this->formationMode_){
    260             case FormationMode::WALL:
    261             {
    262                 targetRelativePositionOfWingman = new Vector3 (-400, 0, 0); 
    263                 break;
    264             }
    265             case FormationMode::FINGER4:
    266             {
    267                 targetRelativePositionOfWingman = new Vector3 (-400, 0, 200); 
    268                 break;
    269             }
    270             case FormationMode::DIAMOND:
    271             {
    272                 targetRelativePositionOfWingman = new Vector3 (400, -200, 0);                 
    273                 break;
    274             }
    275         }
    276         Quaternion orient = this->getControllableEntity()->getWorldOrientation();
    277        
    278         Vector3 targetAbsolutePositionOfWingman = ((this->getControllableEntity()->getWorldPosition()) +
    279         (this->getControllableEntity()->getWorldOrientation()* (*targetRelativePositionOfWingman)));
    280        
    281         myWingman_->setAction (Action::FLY, targetAbsolutePositionOfWingman, orient);
    282        
    283     }
     243   
    284244
    285245    LeaderController* SectionController::findNewDivisionLeader()
  • code/branches/campaignHS15/src/orxonox/controllers/SectionController.h

    r10854 r10856  
    5252            //----[own functions]----
    5353                LeaderController* findNewDivisionLeader();
    54                 void setTargetPositionOfWingman();
    5554
    5655                virtual bool setWingman(CommonController* cwingman);
     
    6463                virtual void action(); //<! action() is called in regular intervals managing the bot's behaviour.
    6564                Vector3 getFormationPosition ();
    66                 void boostControl();
    6765        private:
    6866            //----private variables-----
  • code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc

    r10854 r10856  
    9696        else if (this->myLeader_)
    9797        {
    98 
     98            switch (this->myLeader_->getAction())
     99            {
     100                // case Action::FLY:
     101                // {
     102                //     // Vector3 targetRelativePosition = getFormationPosition();
     103                //     // Quaternion orient =
     104                //     //     this->myDivisionLeader_->getControllableEntity()->getWorldOrientation();
     105                //     // Vector3 targetAbsolutePosition =
     106                //     //     ((this->myDivisionLeader_->getControllableEntity()->getWorldPosition()) +
     107                //     //         (orient* (targetRelativePosition)));
     108                //     // this->setAction (Action::FLY, targetAbsolutePosition, orient);
     109                //     break;
     110                // }
     111                // case Action::FIGHT:
     112                // {
     113
     114                //     // this->setAction (Action::FLY, targetAbsolutePosition, orient);
     115                //     break;
     116                // }
     117                default:
     118                {
     119                    ControllableEntity* myEntity = this->getControllableEntity();
     120                    Vector3 myPosition = myEntity->getWorldPosition();
     121                    if (!this->myLeader_)
     122                    {
     123                        return;
     124                    }
     125                    ControllableEntity* leaderEntity = this->myLeader_->getControllableEntity();
     126                    Quaternion orient = leaderEntity->getWorldOrientation();
     127                    Vector3 leaderPosition = leaderEntity->getWorldPosition();
     128
     129                    Vector3 targetRelativePosition = getFormationPosition();
     130                    if (!this->myLeader_)
     131                    {
     132                        return;
     133                    }
     134                    Vector3 targetAbsolutePosition =
     135                        (leaderPosition + (orient*WorldEntity::FRONT) * (leaderEntity->getVelocity().length()/5)
     136                         + (orient* (targetRelativePosition)));
     137               
     138                    this->setAction (Action::FLY, targetAbsolutePosition, orient);
     139                    if ((targetAbsolutePosition - myPosition).length() > this->tolerance_ * 1.5f)
     140                    {
     141                        this->boostControl();
     142                    }
     143                    else
     144                    {
     145                       this->getControllableEntity()->boost(false);
     146                    }
     147                }
     148            }
    99149        }
    100150       
     
    102152     
    103153   
    104    
     154    Vector3 WingmanController::getFormationPosition ()
     155    {
     156        this->setFormationMode( this->myLeader_->getFormationMode() );
     157        Vector3* targetRelativePosition;
     158
     159        if (this->myLeader_->getRank() == Rank::DIVISIONLEADER)
     160        {
     161            switch (this->formationMode_){
     162                case FormationMode::WALL:
     163                {
     164                    targetRelativePositionOfWingman = new Vector3 (400, 0, 0); 
     165                    break;
     166                }
     167                case FormationMode::FINGER4:
     168                {
     169                    targetRelativePositionOfWingman = new Vector3 (400, 0, 200); 
     170                    break;
     171                }
     172                case FormationMode::DIAMOND:
     173                {
     174                    targetRelativePositionOfWingman = new Vector3 (400, 0, 200);                 
     175                    break;
     176                }
     177            }
     178        }
     179        else
     180        {
     181            switch (this->formationMode_){
     182                case FormationMode::WALL:
     183                {
     184                    targetRelativePositionOfWingman = new Vector3 (-400, 0, 0); 
     185                    break;
     186                }
     187                case FormationMode::FINGER4:
     188                {
     189                    targetRelativePositionOfWingman = new Vector3 (-400, 0, 200); 
     190                    break;
     191                }
     192                case FormationMode::DIAMOND:
     193                {
     194                    targetRelativePositionOfWingman = new Vector3 (400, -200, 0);                 
     195                    break;
     196                }
     197            }
     198        }
     199       
     200        return *targetRelativePosition;
     201    }
    105202    //----POST: closest leader that is ready to take a new wingman is returned----
    106203    CommonController* WingmanController::findNewLeader()
  • code/branches/campaignHS15/src/orxonox/controllers/WingmanController.h

    r10851 r10856  
    5858            //----action must only be managed by this----
    5959                virtual void action(); //<! action() is called in regular intervals managing the bot's behaviour.
     60                Vector3 getFormationPosition ();
    6061
    6162        private:
Note: See TracChangeset for help on using the changeset viewer.