Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 21, 2013, 3:12:21 PM (11 years ago)
Author:
smerkli
Message:

Merged Maxim's Branch back into trunk.

Location:
code/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

  • code/trunk/src/orxonox/controllers/Controller.h

    r8706 r9625  
    6565            virtual void changedControllableEntity() {}
    6666
    67         protected:
    6867            // don't use this directly, use getPlayer()->startControl(entity) (unless you know exactly what you do)
    6968            inline void setControllableEntity(ControllableEntity* entity)
  • code/trunk/src/orxonox/controllers/FormationController.cc

    r9348 r9625  
    535535
    536536
     537    // Sets newMaster as the new master within the formation. Called by the master.
     538    void FormationController::setNewMasterWithinFormation(FormationController* newMaster)
     539        {
     540            if(this->state_ != MASTER || newMaster->myMaster_ != this) return;
     541
     542            if (!this->slaves_.empty())
     543            {
     544                                std::vector<FormationController*>::iterator it2 = std::find(this->slaves_.begin(), this->slaves_.end(), newMaster);
     545                                if (it2 != this->slaves_.end())
     546                                {
     547                                         this->slaves_.erase(it2);
     548                                }
     549
     550                newMaster->state_ = MASTER;
     551                newMaster->slaves_ = this->slaves_;
     552                newMaster->myMaster_ = 0;
     553
     554                for(std::vector<FormationController*>::iterator it = newMaster->slaves_.begin(); it != newMaster->slaves_.end(); it++)
     555                {
     556                    (*it)->myMaster_ = newMaster;
     557                }
     558            }
     559
     560            this->slaves_.clear();
     561            this->specificMasterAction_ = NONE;
     562            this->state_ = FREE;
     563        }
     564
     565
     566
    537567  /**
    538         @brief Frees all slaves form a master. Initiated by a master.
     568        @brief Frees all slaves from a master. Initiated by a master.
    539569    */
    540570    void FormationController::freeSlaves()
  • code/trunk/src/orxonox/controllers/FormationController.h

    r9348 r9625  
    5959      static void passivebehaviour(const bool passive);
    6060      static void formationsize(const int size);
     61      void setNewMasterWithinFormation(FormationController* newMaster);
    6162
    6263      inline void setFormationFlight(bool formation)
     
    9899      virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage);
    99100
     101      FormationController* getMaster( void ) { return myMaster_; }
     102      FormationController* getController( void ) { return this; }
     103      FormationController* getSlave( void ) { return this->slaves_.back(); }
     104
    100105  protected:
    101106      bool formationFlight_;
     
    127132      void searchNewMaster();
    128133      void commandSlaves();
     134      void takeLeadOfFormation();
     135      void loseMasterState();
    129136      void setNewMasterWithinFormation();
    130137
    131138      void freeSlaves();
    132139      void forceFreeSlaves();
    133       void loseMasterState();
    134140      void forceFreedom();
    135141      bool forcedFree();
    136142
    137       void takeLeadOfFormation();
    138143      void masterAttacked(Pawn* originator);
    139144
     
    159164
    160165      void setTarget(Pawn* target);
     166
    161167      void searchNewTarget();
    162168      void forgetTarget();
  • code/trunk/src/orxonox/controllers/HumanController.cc

    r9256 r9625  
    102102
    103103        // commandslaves when Master of a formation
    104         if (HumanController::localController_s && HumanController::localController_s->state_==MASTER)
     104        if (HumanController::localController_s && HumanController::localController_s->state_==MASTER && FormationController::slaves_.size() > 0)
    105105        {
    106106            if (HumanController::localController_s->formationMode_ != ATTACK)
Note: See TracChangeset for help on using the changeset viewer.