[Orxonox-commit 3604] r8289 - code/branches/dockingsystem2/src/orxonox/infos

dafrick at orxonox.net dafrick at orxonox.net
Thu Apr 21 22:45:43 CEST 2011


Author: dafrick
Date: 2011-04-21 22:45:42 +0200 (Thu, 21 Apr 2011)
New Revision: 8289

Modified:
   code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.cc
   code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.h
Log:
Adding possibility to have a string of temporaryControls.


Modified: code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.cc
===================================================================
--- code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.cc	2011-04-21 18:29:30 UTC (rev 8288)
+++ code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.cc	2011-04-21 20:45:42 UTC (rev 8289)
@@ -50,7 +50,6 @@
         this->controller_ = 0;
         this->controllableEntity_ = 0;
         this->controllableEntityID_ = OBJECTID_UNKNOWN;
-        this->oldControllableEntity_ = 0;
 
         this->gtinfo_ = 0;
         this->gtinfoID_ = OBJECTID_UNKNOWN;
@@ -150,8 +149,9 @@
         if (!entity || entity == this->controllableEntity_)
             return;
 
-        if (this->oldControllableEntity_)
+        while (this->previousControllableEntity_.size() > 0)
             this->stopTemporaryControl();
+        
         if (this->controllableEntity_)
             this->stopControl();
 
@@ -175,10 +175,8 @@
     {
         if (!entity)
             return;
-
-        assert( this->oldControllableEntity_==0 );
-
-        this->oldControllableEntity_ = this->controllableEntity_;
+        
+        this->previousControllableEntity_.push_back(WeakPtr<ControllableEntity>(this->controllableEntity_));
         this->controllableEntity_ = entity;
         this->controllableEntityID_ = entity->getObjectID();
 
@@ -193,7 +191,7 @@
 
     void PlayerInfo::stopControl()
     {
-        if ( this->oldControllableEntity_ )
+        while ( this->previousControllableEntity_.size() > 0)
             this->stopTemporaryControl();
 
         ControllableEntity* entity = this->controllableEntity_;
@@ -218,17 +216,20 @@
     {
         ControllableEntity* entity = this->controllableEntity_;
 
-        assert( this->controllableEntity_ && this->oldControllableEntity_ );
-        if( !entity || !this->oldControllableEntity_ )
+        assert(this->controllableEntity_ != NULL);
+        if( !entity || this->previousControllableEntity_.size() == 0 )
             return;
 
         this->controllableEntity_->setController(0);
-
-        this->controllableEntity_ = this->oldControllableEntity_;
+        
+        this->controllableEntity_ = this->previousControllableEntity_.back();
+        do {
+            this->controllableEntity_ = this->previousControllableEntity_.back();
+        } while(this->controllableEntity_ == NULL && this->previousControllableEntity_.size() > 0);
         this->controllableEntityID_ = this->controllableEntity_->getObjectID();
-        this->oldControllableEntity_ = 0;
+        this->previousControllableEntity_.pop_back();
 
-        if ( this->controllableEntity_ && this->controller_)
+        if ( this->controllableEntity_ != NULL && this->controller_ != NULL)
             this->controller_->setControllableEntity(this->controllableEntity_);
 
         if ( GameMode::isMaster() )

Modified: code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.h
===================================================================
--- code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.h	2011-04-21 18:29:30 UTC (rev 8288)
+++ code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.h	2011-04-21 20:45:42 UTC (rev 8289)
@@ -97,7 +97,7 @@
             bool bReadyToSpawn_;
             Controller* controller_;
             ControllableEntity* controllableEntity_;
-            ControllableEntity* oldControllableEntity_;
+            std::vector< WeakPtr<ControllableEntity> > previousControllableEntity_; //!< List of the previous ControllableEntities if repeatedly startTemporary control was called. The ControllableEntity at the back is the most recent.
             unsigned int controllableEntityID_;
 
             const GametypeInfo* gtinfo_;




More information about the Orxonox-commit mailing list