[Orxonox-commit 691] r3223 - in branches/core4/src: core network network/synchronisable orxonox/objects orxonox/objects/collisionshapes orxonox/objects/controllers orxonox/objects/gametypes orxonox/objects/infos orxonox/objects/items orxonox/objects/pickup orxonox/objects/quest orxonox/objects/weaponsystem/projectiles orxonox/objects/worldentities orxonox/objects/worldentities/pawns orxonox/objects/worldentities/triggers orxonox/overlays/hud orxonox/overlays/map

rgrieder at orxonox.net rgrieder at orxonox.net
Tue Jun 23 19:28:49 CEST 2009


Author: rgrieder
Date: 2009-06-23 19:28:48 +0200 (Tue, 23 Jun 2009)
New Revision: 3223

Modified:
   branches/core4/src/core/EventIncludes.h
   branches/core4/src/core/Identifier.cc
   branches/core4/src/core/Identifier.h
   branches/core4/src/core/Iterator.h
   branches/core4/src/core/OrxonoxClass.h
   branches/core4/src/core/XMLPort.h
   branches/core4/src/network/NetworkFunction.h
   branches/core4/src/network/synchronisable/Synchronisable.cc
   branches/core4/src/orxonox/objects/Level.cc
   branches/core4/src/orxonox/objects/Scene.cc
   branches/core4/src/orxonox/objects/collisionshapes/CollisionShape.cc
   branches/core4/src/orxonox/objects/controllers/ArtificialController.cc
   branches/core4/src/orxonox/objects/controllers/HumanController.cc
   branches/core4/src/orxonox/objects/gametypes/Pong.cc
   branches/core4/src/orxonox/objects/gametypes/TeamBaseMatch.cc
   branches/core4/src/orxonox/objects/gametypes/TeamDeathmatch.cc
   branches/core4/src/orxonox/objects/infos/PlayerInfo.cc
   branches/core4/src/orxonox/objects/items/Engine.cc
   branches/core4/src/orxonox/objects/pickup/PickupCollection.cc
   branches/core4/src/orxonox/objects/pickup/PickupSpawner.cc
   branches/core4/src/orxonox/objects/quest/QuestManager.cc
   branches/core4/src/orxonox/objects/weaponsystem/projectiles/Projectile.cc
   branches/core4/src/orxonox/objects/worldentities/Attacher.cc
   branches/core4/src/orxonox/objects/worldentities/BigExplosion.cc
   branches/core4/src/orxonox/objects/worldentities/ControllableEntity.cc
   branches/core4/src/orxonox/objects/worldentities/MovableEntity.cc
   branches/core4/src/orxonox/objects/worldentities/PongBall.cc
   branches/core4/src/orxonox/objects/worldentities/PongCenterpoint.cc
   branches/core4/src/orxonox/objects/worldentities/WorldEntity.cc
   branches/core4/src/orxonox/objects/worldentities/pawns/Destroyer.cc
   branches/core4/src/orxonox/objects/worldentities/pawns/SpaceShip.cc
   branches/core4/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc
   branches/core4/src/orxonox/objects/worldentities/triggers/CheckPoint.cc
   branches/core4/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc
   branches/core4/src/orxonox/overlays/hud/AnnounceMessage.cc
   branches/core4/src/orxonox/overlays/hud/DeathMessage.cc
   branches/core4/src/orxonox/overlays/hud/GametypeStatus.cc
   branches/core4/src/orxonox/overlays/hud/HUDHealthBar.cc
   branches/core4/src/orxonox/overlays/hud/HUDRadar.cc
   branches/core4/src/orxonox/overlays/hud/HUDSpeedBar.cc
   branches/core4/src/orxonox/overlays/hud/HUDTimer.cc
   branches/core4/src/orxonox/overlays/hud/KillMessage.cc
   branches/core4/src/orxonox/overlays/hud/PongScore.cc
   branches/core4/src/orxonox/overlays/hud/TeamBaseMatchScore.cc
   branches/core4/src/orxonox/overlays/hud/UnderAttackHealthBar.cc
   branches/core4/src/orxonox/overlays/map/Map.cc
Log:
Add a new core-feature: orxonox_cast<T>()
The functions casts objects like dynamic_cast, but uses the identifier instead for MSVC (much faster) and is just a redirection to dynamic_cast for GCC.
Also replaced almost all dynamic_casts (of course only those related to the class hierarchy).

Modified: branches/core4/src/core/EventIncludes.h
===================================================================
--- branches/core4/src/core/EventIncludes.h	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/core/EventIncludes.h	2009-06-23 17:28:48 UTC (rev 3223)
@@ -53,7 +53,7 @@
         containername = new orxonox::EventContainer(std::string(eventname), executor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \
         this->addEventContainer(eventname, containername); \
     } \
-    event.castedOriginator_ = dynamic_cast<subclassname*>(event.originator_); \
+    event.castedOriginator_ = orxonox::orxonox_cast<subclassname>(event.originator_); \
     containername->process(this, event)
 
 #define ORXONOX_SET_EVENT_GENERIC_TEMPLATE(containername, classname, eventname, functionname, event, subclassname, ...) \
@@ -65,7 +65,7 @@
         containername = new orxonox::EventContainer(std::string(eventname), executor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \
         this->addEventContainer(eventname, containername); \
     } \
-    event.castedOriginator_ = dynamic_cast<subclassname*>(event.originator_); \
+    event.castedOriginator_ = orxonox::orxonox_cast<subclassname>(event.originator_); \
     containername->process(this, event)
 
 #endif /* _EventIncludes_H__ */

Modified: branches/core4/src/core/Identifier.cc
===================================================================
--- branches/core4/src/core/Identifier.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/core/Identifier.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -46,12 +46,14 @@
     // ###############################
     // ###       Identifier        ###
     // ###############################
-    int Identifier::hierarchyCreatingCounter_s = 0; // Set the static member variable hierarchyCreatingCounter_s to zero (this static member variable is ok: it's used in main(), not before)
+    int Identifier::hierarchyCreatingCounter_s = 0;
+    unsigned int Identifier::classIDCounter_s = 0;
 
     /**
         @brief Constructor: No factory, no object created, new ObjectList and a unique networkID.
     */
     Identifier::Identifier()
+        : classID_(classIDCounter_s++)
     {
         this->objects_ = new ObjectListBase(this);
 
@@ -66,9 +68,8 @@
         this->children_ = new std::set<const Identifier*>();
         this->directChildren_ = new std::set<const Identifier*>();
 
-        // Use a static variable because the classID gets created before main() and that's why we should avoid static member variables
-        static unsigned int classIDcounter_s = 0;
-        this->classID_ = classIDcounter_s++;
+        // Default network ID is the class ID
+        this->networkID_ = this->classID_;
     }
 
     /**
@@ -243,8 +244,8 @@
     */
     void Identifier::setNetworkID(uint32_t id)
     {
-        Factory::changeNetworkID(this, this->classID_, id);
-        this->classID_ = id;
+        Factory::changeNetworkID(this, this->networkID_, id);
+        this->networkID_ = id;
     }
 
     /**

Modified: branches/core4/src/core/Identifier.h
===================================================================
--- branches/core4/src/core/Identifier.h	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/core/Identifier.h	2009-06-23 17:28:48 UTC (rev 3223)
@@ -223,11 +223,14 @@
             inline static bool isCreatingHierarchy() { return (hierarchyCreatingCounter_s > 0); }
 
             /** @brief Returns the network ID to identify a class through the network. @return the network ID */
-            inline const uint32_t getNetworkID() const { return this->classID_; }
+            inline const uint32_t getNetworkID() const { return this->networkID_; }
 
             /** @brief Sets the network ID to a new value. @param id The new value */
             void setNetworkID(uint32_t id);
 
+            /** @brief Returns the unique ID of the class */
+            FORCEINLINE unsigned int getClassID() const { return this->classID_; }
+
             void addConfigValueContainer(const std::string& varname, ConfigValueContainer* container);
             ConfigValueContainer* getConfigValueContainer(const std::string& varname);
             ConfigValueContainer* getLowercaseConfigValueContainer(const std::string& varname);
@@ -304,7 +307,9 @@
             std::string name_;                                             //!< The name of the class the Identifier belongs to
             BaseFactory* factory_;                                         //!< The Factory, able to create new objects of the given class (if available)
             static int hierarchyCreatingCounter_s;                         //!< Bigger than zero if at least one Identifier stores its parents (its an int instead of a bool to avoid conflicts with multithreading)
-            uint32_t classID_;                                             //!< The network ID to identify a class through the network
+            uint32_t networkID_;                                           //!< The network ID to identify a class through the network
+            const unsigned int classID_;                                   //!< Uniquely identifies a class (might not be the same as the networkID_)
+            static unsigned int classIDCounter_s;                          //!< Static counter for the unique classIDs
 
             bool bHasConfigValues_;                                        //!< True if this class has at least one assigned config value
             std::map<std::string, ConfigValueContainer*> configValues_;    //!< A map to link the string of configurable variables with their ConfigValueContainer
@@ -426,6 +431,8 @@
     {
         COUT(5) << "*** ClassIdentifier: Added object to " << this->getName() << "-list." << std::endl;
         object->getMetaList().add(this->objects_, this->objects_->add(new ObjectListElement<T>(object)));
+        // Add pointer of type T to the map in the OrxonoxClass instance that enables "dynamic_casts"
+        object->objectPointers_.push_back(std::make_pair(this->getClassID(), reinterpret_cast<void*>(object)));
     }
 
     /**
@@ -447,6 +454,31 @@
 
 
     // ###############################
+    // ###      orxonox_cast       ###
+    // ###############################
+    /**
+    @brief
+        Casts on object of type OrxonoxClass to any derived type that is
+        registered in the class hierarchy.
+    @return
+        Returns NULL if the cast is not possible
+    @note
+        In case of NULL return (and using MSVC), a dynamic_cast might still be possible if
+        a class forgot to register its objects.
+        Also note that the function is implemented differently for GCC/MSVC.
+    */
+    template <class T, class U>
+    FORCEINLINE T* orxonox_cast(U* source)
+    {
+#ifdef ORXONOX_COMPILER_MSVC
+        return source->template getDerivedPointer<T>(ClassIdentifier<T>::getIdentifier()->getClassID());
+#else
+        return dynamic_cast<T*>(source);
+#endif
+    }
+
+
+    // ###############################
     // ###   SubclassIdentifier    ###
     // ###############################
     //! The SubclassIdentifier acts almost like an Identifier, but has some prerequisites.
@@ -538,7 +570,7 @@
                 // Check if the creation was successful
                 if (newObject)
                 {
-                    return dynamic_cast<T*>(newObject);
+                    return orxonox_cast<T>(newObject);
                 }
                 else
                 {

Modified: branches/core4/src/core/Iterator.h
===================================================================
--- branches/core4/src/core/Iterator.h	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/core/Iterator.h	2009-06-23 17:28:48 UTC (rev 3223)
@@ -239,7 +239,7 @@
             inline T* operator*() const
             {
                 if (this->element_)
-                    return dynamic_cast<T*>(this->element_->objectBase_);
+                    return orxonox_cast<T>(this->element_->objectBase_);
                 else
                     return 0;
             }
@@ -251,7 +251,7 @@
             inline T* operator->() const
             {
                 if (this->element_)
-                    return dynamic_cast<T*>(this->element_->objectBase_);
+                    return orxonox_cast<T>(this->element_->objectBase_);
                 else
                     return 0;
             }

Modified: branches/core4/src/core/OrxonoxClass.h
===================================================================
--- branches/core4/src/core/OrxonoxClass.h	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/core/OrxonoxClass.h	2009-06-23 17:28:48 UTC (rev 3223)
@@ -49,6 +49,9 @@
     */
     class _CoreExport OrxonoxClass
     {
+        template <class T>
+        friend class ClassIdentifier;
+
         public:
             OrxonoxClass();
             virtual ~OrxonoxClass();
@@ -100,10 +103,30 @@
             bool isParentOf(const OrxonoxClass* object);
             bool isDirectParentOf(const OrxonoxClass* object);
 
+            /**
+            @brief
+                Returns a valid pointer of any derived type that is
+                registered in the class hierarchy.
+            @return
+                Returns NULL if the no pointer was found.
+            */
+            template <class T>
+            FORCEINLINE T* getDerivedPointer(unsigned int classID) const
+            {
+                for (int i = this->objectPointers_.size() - 1; i >= 0; --i)
+                {
+                    if (this->objectPointers_[i].first == classID)
+                        return reinterpret_cast<T*>(this->objectPointers_[i].second);
+                }
+                return NULL;
+            }
+
         private:
             Identifier* identifier_;                   //!< The Identifier of the object
             std::set<const Identifier*>* parents_;     //!< List of all parents of the object
             MetaObjectList* metaList_;                 //!< MetaObjectList, containing all ObjectLists and ObjectListElements the object is registered in
+            //! 'Fast map' that holds this-pointers of all derived types
+            std::vector<std::pair<unsigned int, void*> > objectPointers_;
     };
 }
 

Modified: branches/core4/src/core/XMLPort.h
===================================================================
--- branches/core4/src/core/XMLPort.h	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/core/XMLPort.h	2009-06-23 17:28:48 UTC (rev 3223)
@@ -564,7 +564,7 @@
                                                     assert(newObject);
                                                     newObject->setLoaderIndentation(object->getLoaderIndentation() + "  ");
 
-                                                    O* castedObject = dynamic_cast<O*>(newObject);
+                                                    O* castedObject = orxonox_cast<O>(newObject);
                                                     assert(castedObject);
 
                                                     if (this->bLoadBefore_)

Modified: branches/core4/src/network/NetworkFunction.h
===================================================================
--- branches/core4/src/network/NetworkFunction.h	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/network/NetworkFunction.h	2009-06-23 17:28:48 UTC (rev 3223)
@@ -149,32 +149,32 @@
     inline void call(uint32_t objectID)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(dynamic_cast<T*>(Synchronisable::getSynchronisable(objectID)));
+        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)));
     }
     inline void call(uint32_t objectID, const MultiType& mt1)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(dynamic_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1);
+        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1);
     }
     inline void call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(dynamic_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2);
+        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1, mt2);
     }
     inline void call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(dynamic_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3);
+        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3);
     }
     inline void call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(dynamic_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4);
+        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4);
     }
     inline void call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(dynamic_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4, mt5);
+        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4, mt5);
     }
     
   private:

Modified: branches/core4/src/network/synchronisable/Synchronisable.cc
===================================================================
--- branches/core4/src/network/synchronisable/Synchronisable.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/network/synchronisable/Synchronisable.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -72,7 +72,7 @@
     searchcreatorID:
     if (creator)
     {
-        Synchronisable* synchronisable_creator = dynamic_cast<Synchronisable*>(creator);
+        Synchronisable* synchronisable_creator = orxonox_cast<Synchronisable>(creator);
         if (synchronisable_creator && synchronisable_creator->objectMode_)
         {
             this->creatorID = synchronisable_creator->getObjectID();
@@ -160,12 +160,12 @@
         return 0;
       }
       else
-        creator = dynamic_cast<BaseObject*>(synchronisable_creator);
+        creator = orxonox_cast<BaseObject>(synchronisable_creator);
     }
     assert(getSynchronisable(header.getObjectID())==0);   //make sure no object with this id exists
     BaseObject *bo = id->fabricate(creator);
     assert(bo);
-    Synchronisable *no = dynamic_cast<Synchronisable *>(bo);
+    Synchronisable *no = orxonox_cast<Synchronisable>(bo);
     assert(no);
     no->objectID=header.getObjectID();
     no->creatorID=header.getCreatorID(); //TODO: remove this

Modified: branches/core4/src/orxonox/objects/Level.cc
===================================================================
--- branches/core4/src/orxonox/objects/Level.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/Level.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -120,7 +120,7 @@
 
 std::cout << "Load Gametype: " << this->gametype_ << std::endl;
 
-        Gametype* rootgametype = dynamic_cast<Gametype*>(identifier->fabricate(this));
+        Gametype* rootgametype = orxonox_cast<Gametype>(identifier->fabricate(this));
         this->setGametype(rootgametype);
 
 std::cout << "root gametype: " << rootgametype->getIdentifier()->getName() << std::endl;

Modified: branches/core4/src/orxonox/objects/Scene.cc
===================================================================
--- branches/core4/src/orxonox/objects/Scene.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/Scene.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -325,9 +325,9 @@
     {
         // get the WorldEntity pointers
         WorldEntity* object0 = (WorldEntity*)colObj0->getUserPointer();
-        assert(dynamic_cast<WorldEntity*>(object0));
+        assert(orxonox_cast<WorldEntity>(object0));
         WorldEntity* object1 = (WorldEntity*)colObj1->getUserPointer();
-        assert(dynamic_cast<WorldEntity*>(object1));
+        assert(orxonox_cast<WorldEntity>(object1));
 
         // false means that bullet will assume we didn't modify the contact
         bool modified = false;

Modified: branches/core4/src/orxonox/objects/collisionshapes/CollisionShape.cc
===================================================================
--- branches/core4/src/orxonox/objects/collisionshapes/CollisionShape.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/collisionshapes/CollisionShape.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -84,12 +84,12 @@
         Synchronisable* parent = Synchronisable::getSynchronisable(this->parentID_);
         // Parent can either be a WorldEntity or a CompoundCollisionShape. The reason is that the
         // internal collision shape (which is compound) of a WE doesn't get synchronised.
-        CompoundCollisionShape* parentCCS = dynamic_cast<CompoundCollisionShape*>(parent);
+        CompoundCollisionShape* parentCCS = orxonox_cast<CompoundCollisionShape>(parent);
         if (parentCCS)
             parentCCS->attach(this);
         else
         {
-            WorldEntity* parentWE = dynamic_cast<WorldEntity*>(parent);
+            WorldEntity* parentWE = orxonox_cast<WorldEntity>(parent);
             if (parentWE)
                 parentWE->attachCollisionShape(this);
         }
@@ -102,7 +102,7 @@
 
         this->parent_ = newParent;
 
-        WorldEntityCollisionShape* parentWECCS = dynamic_cast<WorldEntityCollisionShape*>(newParent);
+        WorldEntityCollisionShape* parentWECCS = orxonox_cast<WorldEntityCollisionShape>(newParent);
         if (parentWECCS)
             this->parentID_ = parentWECCS->getWorldEntityOwner()->getObjectID();
         else

Modified: branches/core4/src/orxonox/objects/controllers/ArtificialController.cc
===================================================================
--- branches/core4/src/orxonox/objects/controllers/ArtificialController.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/controllers/ArtificialController.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -180,18 +180,18 @@
 
         if (entity1->getXMLController())
         {
-            WaypointPatrolController* wpc = dynamic_cast<WaypointPatrolController*>(entity1->getXMLController());
+            WaypointPatrolController* wpc = orxonox_cast<WaypointPatrolController>(entity1->getXMLController());
             if (wpc)
                 team1 = wpc->getTeam();
         }
         if (entity2->getXMLController())
         {
-            WaypointPatrolController* wpc = dynamic_cast<WaypointPatrolController*>(entity2->getXMLController());
+            WaypointPatrolController* wpc = orxonox_cast<WaypointPatrolController>(entity2->getXMLController());
             if (wpc)
                 team2 = wpc->getTeam();
         }
 
-        TeamDeathmatch* tdm = dynamic_cast<TeamDeathmatch*>(gametype);
+        TeamDeathmatch* tdm = orxonox_cast<TeamDeathmatch>(gametype);
         if (tdm)
         {
             if (entity1->getPlayer())
@@ -202,7 +202,7 @@
         }
 
         TeamBaseMatchBase* base = 0;
-        base = dynamic_cast<TeamBaseMatchBase*>(entity1);
+        base = orxonox_cast<TeamBaseMatchBase>(entity1);
         if (base)
         {
             switch (base->getState())
@@ -218,7 +218,7 @@
                     team1 = -1;
             }
         }
-        base = dynamic_cast<TeamBaseMatchBase*>(entity2);
+        base = orxonox_cast<TeamBaseMatchBase>(entity2);
         if (base)
         {
             switch (base->getState())

Modified: branches/core4/src/orxonox/objects/controllers/HumanController.cc
===================================================================
--- branches/core4/src/orxonox/objects/controllers/HumanController.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/controllers/HumanController.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -160,7 +160,7 @@
     {
         if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
         {
-            Pawn* pawn = dynamic_cast<Pawn*>(HumanController::localController_s->controllableEntity_);
+            Pawn* pawn = orxonox_cast<Pawn>(HumanController::localController_s->controllableEntity_);
             if (pawn)
                 pawn->kill();
             else if (HumanController::localController_s->player_)
@@ -195,7 +195,7 @@
     Pawn* HumanController::getLocalControllerEntityAsPawn()
     {
         if (HumanController::localController_s)
-            return dynamic_cast<Pawn*>(HumanController::localController_s->getControllableEntity());
+            return orxonox_cast<Pawn>(HumanController::localController_s->getControllableEntity());
         else
             return NULL;
     }

Modified: branches/core4/src/orxonox/objects/gametypes/Pong.cc
===================================================================
--- branches/core4/src/orxonox/objects/gametypes/Pong.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/gametypes/Pong.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -143,7 +143,7 @@
 
         if (player && player->getController() && player->getController()->isA(Class(PongAI)))
         {
-            PongAI* ai = dynamic_cast<PongAI*>(player->getController());
+            PongAI* ai = orxonox_cast<PongAI>(player->getController());
             ai->setPongBall(this->ball_);
         }
     }

Modified: branches/core4/src/orxonox/objects/gametypes/TeamBaseMatch.cc
===================================================================
--- branches/core4/src/orxonox/objects/gametypes/TeamBaseMatch.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/gametypes/TeamBaseMatch.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -53,7 +53,7 @@
     // Change the control of the defeated base and respawn it with its initial health
     bool TeamBaseMatch::allowPawnDeath(Pawn* victim, Pawn* originator)
     {
-        TeamBaseMatchBase* base = dynamic_cast<TeamBaseMatchBase*>(victim);
+        TeamBaseMatchBase* base = orxonox_cast<TeamBaseMatchBase>(victim);
         if (base)
         {
             if (!originator)
@@ -86,7 +86,7 @@
     // if the player is in the same team as the base, he can't make any damage to it
     bool TeamBaseMatch::allowPawnDamage(Pawn* victim, Pawn* originator)
     {
-        TeamBaseMatchBase* base = dynamic_cast<TeamBaseMatchBase*>(victim);
+        TeamBaseMatchBase* base = orxonox_cast<TeamBaseMatchBase>(victim);
         if (base)
         {
             std::set<TeamBaseMatchBase*>::const_iterator it = this->bases_.find(base);

Modified: branches/core4/src/orxonox/objects/gametypes/TeamDeathmatch.cc
===================================================================
--- branches/core4/src/orxonox/objects/gametypes/TeamDeathmatch.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/gametypes/TeamDeathmatch.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -125,7 +125,7 @@
         {
             if ((*it)->isA(Class(TeamSpawnPoint)))
             {
-                TeamSpawnPoint* tsp = dynamic_cast<TeamSpawnPoint*>(*it);
+                TeamSpawnPoint* tsp = orxonox_cast<TeamSpawnPoint>(*it);
                 if (tsp && (int)tsp->getTeamNumber() != desiredTeamNr)
                 {
                     teamSpawnPoints.erase(it++);
@@ -170,7 +170,7 @@
                 {
                     if ((*it)->isA(Class(TeamColourable)))
                     {
-                        TeamColourable* tc = dynamic_cast<TeamColourable*>(*it);
+                        TeamColourable* tc = orxonox_cast<TeamColourable>(*it);
                         tc->setTeamColour(this->teamcolours_[it_player->second]);
                     }
                 }

Modified: branches/core4/src/orxonox/objects/infos/PlayerInfo.cc
===================================================================
--- branches/core4/src/orxonox/objects/infos/PlayerInfo.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/infos/PlayerInfo.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -185,7 +185,7 @@
         if (this->controllableEntityID_ != OBJECTID_UNKNOWN)
         {
             Synchronisable* temp = Synchronisable::getSynchronisable(this->controllableEntityID_);
-            ControllableEntity* entity = dynamic_cast<ControllableEntity*>(temp);
+            ControllableEntity* entity = orxonox_cast<ControllableEntity>(temp);
             this->startControl(entity);
         }
         else
@@ -198,7 +198,7 @@
     {
         if (this->gtinfoID_ != OBJECTID_UNKNOWN)
         {
-            this->gtinfo_ = dynamic_cast<GametypeInfo*>(Synchronisable::getSynchronisable(this->gtinfoID_));
+            this->gtinfo_ = orxonox_cast<GametypeInfo>(Synchronisable::getSynchronisable(this->gtinfoID_));
 
             if (!this->gtinfo_)
                 this->gtinfoID_ = OBJECTID_UNKNOWN;

Modified: branches/core4/src/orxonox/objects/items/Engine.cc
===================================================================
--- branches/core4/src/orxonox/objects/items/Engine.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/items/Engine.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -137,7 +137,7 @@
         {
             Synchronisable* object = Synchronisable::getSynchronisable(this->shipID_);
             if (object)
-                this->addToSpaceShip(dynamic_cast<SpaceShip*>(object));
+                this->addToSpaceShip(orxonox_cast<SpaceShip>(object));
         }
     }
 

Modified: branches/core4/src/orxonox/objects/pickup/PickupCollection.cc
===================================================================
--- branches/core4/src/orxonox/objects/pickup/PickupCollection.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/pickup/PickupCollection.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -65,7 +65,7 @@
         {
             Identifier* ident = Class(UsableItem);
             if(this->currentUsable_ == NULL && item->isA(ident))
-                this->currentUsable_ = dynamic_cast<UsableItem*>(item);
+                this->currentUsable_ = orxonox_cast<UsableItem>(item);
 
             this->items_.insert( std::pair<std::string, BaseItem*> (item->getPickupIdentifier(), item) );
             return true;
@@ -335,7 +335,7 @@
         for (std::multimap<std::string, BaseItem*>::iterator it = this->items_.begin(); it != this->items_.end(); it++)
         {
             if ((*it).second->isA(ident))
-                ret.push_back(dynamic_cast<EquipmentItem*>((*it).second));
+                ret.push_back(orxonox_cast<EquipmentItem>((*it).second));
         }
 
         return ret;
@@ -352,7 +352,7 @@
         for (std::multimap<std::string, BaseItem*>::iterator it = this->items_.begin(); it != this->items_.end(); it++)
         {
             if ((*it).second->isA(ident))
-                ret.push_back(dynamic_cast<PassiveItem*>((*it).second));
+                ret.push_back(orxonox_cast<PassiveItem>((*it).second));
         }
 
         return ret;
@@ -369,7 +369,7 @@
         for (std::multimap<std::string, BaseItem*>::iterator it = this->items_.begin(); it != this->items_.end(); it++)
         {
             if ((*it).second->isA(ident))
-                ret.push_back(dynamic_cast<UsableItem*>((*it).second));
+                ret.push_back(orxonox_cast<UsableItem>((*it).second));
         }
 
         return ret;

Modified: branches/core4/src/orxonox/objects/pickup/PickupSpawner.cc
===================================================================
--- branches/core4/src/orxonox/objects/pickup/PickupSpawner.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/pickup/PickupSpawner.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -85,7 +85,7 @@
         // Load the GUI image as soon as the PickupSpawner gets loaded
         //  = less delays while running
         BaseObject* newObject = this->itemTemplate_->getBaseclassIdentifier()->fabricate(this);
-        BaseItem* asItem = dynamic_cast<BaseItem*>(newObject);
+        BaseItem* asItem = orxonox_cast<BaseItem>(newObject);
         if (asItem)
         {
             asItem->addTemplate(this->itemTemplate_);
@@ -153,7 +153,7 @@
         if (this->isActive() && this->itemTemplate_ && this->itemTemplate_->getBaseclassIdentifier())
         {
             BaseObject* newObject = this->itemTemplate_->getBaseclassIdentifier()->fabricate(this);
-            BaseItem* asItem = dynamic_cast<BaseItem*>(newObject);
+            BaseItem* asItem = orxonox_cast<BaseItem>(newObject);
             if (asItem)
             {
                 asItem->setPickupIdentifier(this->itemTemplateName_);

Modified: branches/core4/src/orxonox/objects/quest/QuestManager.cc
===================================================================
--- branches/core4/src/orxonox/objects/quest/QuestManager.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/quest/QuestManager.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -238,7 +238,7 @@
             COUT(1) << "Error: GUIOverlay has no owner. " << std::endl;
             return NULL;
         }
-        player = dynamic_cast<PlayerInfo*>(obj);
+        player = orxonox_cast<PlayerInfo>(obj);
     
         QuestContainer* root = NULL;
         QuestContainer* current = NULL;

Modified: branches/core4/src/orxonox/objects/weaponsystem/projectiles/Projectile.cc
===================================================================
--- branches/core4/src/orxonox/objects/weaponsystem/projectiles/Projectile.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/weaponsystem/projectiles/Projectile.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -125,7 +125,7 @@
             if (this->owner_)
                 dmg = this->owner_->getPickups().processModifiers(ModifierType::Damage, dmg, false);
 
-            Pawn* victim = dynamic_cast<Pawn*>(otherObject);
+            Pawn* victim = orxonox_cast<Pawn>(otherObject);
             if (victim)
                 victim->damage(dmg, this->owner_);
         }

Modified: branches/core4/src/orxonox/objects/worldentities/Attacher.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/Attacher.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/Attacher.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -110,7 +110,7 @@
         if (this->target_ || this->targetname_ == "")
             return;
 
-        WorldEntity* entity = dynamic_cast<WorldEntity*>(object);
+        WorldEntity* entity = orxonox_cast<WorldEntity>(object);
         if (entity && entity->getName() == this->targetname_)
         {
             this->target_ = entity;

Modified: branches/core4/src/orxonox/objects/worldentities/BigExplosion.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/BigExplosion.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/BigExplosion.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -98,39 +98,39 @@
     {
         Identifier* idDE1 = Class(MovableEntity);
         BaseObject* oDE1 = idDE1->fabricate(this);
-        this->debrisEntity1_ = dynamic_cast<MovableEntity*>(oDE1);
+        this->debrisEntity1_ = orxonox_cast<MovableEntity>(oDE1);
 
         Identifier* idDE2 = Class(MovableEntity);
         BaseObject* oDE2 = idDE2->fabricate(this);
-        this->debrisEntity2_ = dynamic_cast<MovableEntity*>(oDE2);
+        this->debrisEntity2_ = orxonox_cast<MovableEntity>(oDE2);
 
         Identifier* idDE3 = Class(MovableEntity);
         BaseObject* oDE3 = idDE3 ->fabricate(this);
-        this->debrisEntity3_ = dynamic_cast<MovableEntity*>(oDE3);
+        this->debrisEntity3_ = orxonox_cast<MovableEntity>(oDE3);
 
         Identifier* idDE4 = Class(MovableEntity);
         BaseObject* oDE4 = idDE4->fabricate(this);
-        this->debrisEntity4_ = dynamic_cast<MovableEntity*>(oDE4);
+        this->debrisEntity4_ = orxonox_cast<MovableEntity>(oDE4);
 
         Identifier* idD1 = Class(Model);
         BaseObject* oD1 = idD1->fabricate(this);
-        this->debris1_ = dynamic_cast<Model*>(oD1);
+        this->debris1_ = orxonox_cast<Model>(oD1);
 
         Identifier* idD2 = Class(Model);
         BaseObject* oD2 = idD2->fabricate(this);
-        this->debris2_ = dynamic_cast<Model*>(oD2);
+        this->debris2_ = orxonox_cast<Model>(oD2);
 
         Identifier* idD3 = Class(Model);
         BaseObject* oD3 = idD3->fabricate(this);
-        this->debris3_ = dynamic_cast<Model*>(oD3);
+        this->debris3_ = orxonox_cast<Model>(oD3);
 
         Identifier* idD4 = Class(Model);
         BaseObject* oD4 = idD4->fabricate(this);
-        this->debris4_ = dynamic_cast<Model*>(oD4);
+        this->debris4_ = orxonox_cast<Model>(oD4);
 
         Identifier* id6 = Class(StaticEntity);
         BaseObject* object4 = id6->fabricate(this);
-        this->explosion_ = dynamic_cast<StaticEntity*>(object4);
+        this->explosion_ = orxonox_cast<StaticEntity>(object4);
 
         this->debrisSmoke1_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/smoke7", this->LOD_);
         this->debrisSmoke2_ =  new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/smoke7", this->LOD_);
@@ -201,20 +201,20 @@
         {
             Identifier* idf1 = Class(Model);
             BaseObject* obj1 = idf1->fabricate(this);
-            Model* part1 = dynamic_cast<Model*>(obj1);
+            Model* part1 = orxonox_cast<Model>(obj1);
 
 
             Identifier* idf2 = Class(Model);
             BaseObject* obj2 = idf2->fabricate(this);
-            Model* part2 = dynamic_cast<Model*>(obj2);
+            Model* part2 = orxonox_cast<Model>(obj2);
 
             Identifier* idf3 = Class(MovableEntity);
             BaseObject* obj3 = idf3->fabricate(this);
-            MovableEntity* partEntity1 = dynamic_cast<MovableEntity*>(obj3);
+            MovableEntity* partEntity1 = orxonox_cast<MovableEntity>(obj3);
 
             Identifier* idf4 = Class(MovableEntity);
             BaseObject* obj4 = idf4->fabricate(this);
-            MovableEntity* partEntity2 = dynamic_cast<MovableEntity*>(obj4);
+            MovableEntity* partEntity2 = orxonox_cast<MovableEntity>(obj4);
 
             partEntity1->setVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1))*rnd(10,100));
             partEntity1->setAngularVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1)).normalisedCopy() * Degree(400).valueRadians());

Modified: branches/core4/src/orxonox/objects/worldentities/ControllableEntity.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/ControllableEntity.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/ControllableEntity.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -266,7 +266,7 @@
         // just do this in case the entity wasn't yet synchronized when the corresponding PlayerInfo got our objectID
         if (this->playerID_ != OBJECTID_UNKNOWN)
         {
-            this->player_ = dynamic_cast<PlayerInfo*>(Synchronisable::getSynchronisable(this->playerID_));
+            this->player_ = orxonox_cast<PlayerInfo>(Synchronisable::getSynchronisable(this->playerID_));
             if (this->player_ && (this->player_->getControllableEntity() != this))
                 this->player_->startControl(this);
         }

Modified: branches/core4/src/orxonox/objects/worldentities/MovableEntity.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/MovableEntity.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/MovableEntity.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -75,7 +75,7 @@
     {
         if (GameMode::isMaster() && enableCollisionDamage_)
         {
-            Pawn* victim = dynamic_cast<Pawn*>(otherObject);
+            Pawn* victim = orxonox_cast<Pawn>(otherObject);
             if (victim)
             {
                 victim->damage(this->collisionDamage_ * (victim->getVelocity() - this->getVelocity()).length());

Modified: branches/core4/src/orxonox/objects/worldentities/PongBall.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/PongBall.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/PongBall.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -230,8 +230,8 @@
         if (!this->bat_)
             this->bat_ = new PongBat*[2];
         if (this->batID_[0] != OBJECTID_UNKNOWN)
-            this->bat_[0] = dynamic_cast<PongBat*>(Synchronisable::getSynchronisable(this->batID_[0]));
+            this->bat_[0] = orxonox_cast<PongBat>(Synchronisable::getSynchronisable(this->batID_[0]));
         if (this->batID_[1] != OBJECTID_UNKNOWN)
-            this->bat_[1] = dynamic_cast<PongBat*>(Synchronisable::getSynchronisable(this->batID_[1]));
+            this->bat_[1] = orxonox_cast<PongBat>(Synchronisable::getSynchronisable(this->batID_[1]));
     }
 }

Modified: branches/core4/src/orxonox/objects/worldentities/PongCenterpoint.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/PongCenterpoint.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/PongCenterpoint.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -72,7 +72,7 @@
     {
         if (this->getGametype() && this->getGametype()->isA(Class(Pong)))
         {
-            Pong* pong_gametype = dynamic_cast<Pong*>(this->getGametype());
+            Pong* pong_gametype = orxonox_cast<Pong>(this->getGametype());
             pong_gametype->setCenterpoint(this);
         }
     }

Modified: branches/core4/src/orxonox/objects/worldentities/WorldEntity.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/WorldEntity.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/WorldEntity.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -209,7 +209,7 @@
     {
         if (this->parentID_ != OBJECTID_UNKNOWN)
         {
-            WorldEntity* parent = dynamic_cast<WorldEntity*>(Synchronisable::getSynchronisable(this->parentID_));
+            WorldEntity* parent = orxonox_cast<WorldEntity>(Synchronisable::getSynchronisable(this->parentID_));
             if (parent)
                 this->attachToParent(parent);
         }

Modified: branches/core4/src/orxonox/objects/worldentities/pawns/Destroyer.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/pawns/Destroyer.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/pawns/Destroyer.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -39,7 +39,7 @@
     {
         RegisterObject(Destroyer);
 
-        UnderAttack* gametype = dynamic_cast<UnderAttack*>(this->getGametype());
+        UnderAttack* gametype = orxonox_cast<UnderAttack>(this->getGametype());
         if (gametype)
         {
             gametype->addDestroyer(this);

Modified: branches/core4/src/orxonox/objects/worldentities/pawns/SpaceShip.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/pawns/SpaceShip.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/pawns/SpaceShip.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -197,7 +197,7 @@
                 if (identifier)
                 {
                     BaseObject* object = identifier->fabricate(this);
-                    this->engine_ = dynamic_cast<Engine*>(object);
+                    this->engine_ = orxonox_cast<Engine>(object);
 
                     if (this->engine_)
                     {

Modified: branches/core4/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -44,7 +44,7 @@
 
         this->state_ = BaseState::uncontrolled;
 
-        TeamBaseMatch* gametype = dynamic_cast<TeamBaseMatch*>(this->getGametype());
+        TeamBaseMatch* gametype = orxonox_cast<TeamBaseMatch>(this->getGametype());
         if (gametype)
         {
             gametype->addBase(this);
@@ -57,7 +57,7 @@
     {
         this->fireEvent();
 
-        TeamDeathmatch* gametype = dynamic_cast<TeamDeathmatch*>(this->getGametype());
+        TeamDeathmatch* gametype = orxonox_cast<TeamDeathmatch>(this->getGametype());
         if (!gametype)
             return;
 
@@ -83,7 +83,7 @@
         {
             if ((*it)->isA(Class(TeamColourable)))
             {
-                TeamColourable* tc = dynamic_cast<TeamColourable*>(*it);
+                TeamColourable* tc = orxonox_cast<TeamColourable>(*it);
                 tc->setTeamColour(colour);
             }
         }

Modified: branches/core4/src/orxonox/objects/worldentities/triggers/CheckPoint.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/triggers/CheckPoint.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/triggers/CheckPoint.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -84,7 +84,7 @@
     {
         DistanceTrigger::triggered(bIsTriggered);
 
-        Asteroids* gametype = dynamic_cast<Asteroids*>(this->getGametype());
+        Asteroids* gametype = orxonox_cast<Asteroids>(this->getGametype());
         if (gametype)
         {
             gametype->addTime(addTime_);

Modified: branches/core4/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc
===================================================================
--- branches/core4/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -119,7 +119,7 @@
     // Iterate through all objects
     for (ClassTreeMaskObjectIterator it = this->targetMask_.begin(); it != this->targetMask_.end(); ++it)
     {
-      WorldEntity* entity = dynamic_cast<WorldEntity*>(*it);
+      WorldEntity* entity = orxonox_cast<WorldEntity>(*it);
       if (!entity)
         continue;
 
@@ -130,7 +130,7 @@
         // If the target is a player (resp. is a, or is derived from a, ControllableEntity) the triggeringPlayer is set to the target entity.
         if(this->isForPlayer())
         {
-          Pawn* player = dynamic_cast<Pawn*>(entity);
+          Pawn* player = orxonox_cast<Pawn>(entity);
           this->setTriggeringPlayer(player);
         }
 

Modified: branches/core4/src/orxonox/overlays/hud/AnnounceMessage.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/AnnounceMessage.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/AnnounceMessage.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -55,6 +55,6 @@
     {
         SUPER(AnnounceMessage, changedOwner);
 
-        this->owner_ = dynamic_cast<PlayerInfo*>(this->getOwner());
+        this->owner_ = orxonox_cast<PlayerInfo>(this->getOwner());
     }
 }

Modified: branches/core4/src/orxonox/overlays/hud/DeathMessage.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/DeathMessage.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/DeathMessage.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -55,6 +55,6 @@
     {
         SUPER(DeathMessage, changedOwner);
 
-        this->owner_ = dynamic_cast<PlayerInfo*>(this->getOwner());
+        this->owner_ = orxonox_cast<PlayerInfo>(this->getOwner());
     }
 }

Modified: branches/core4/src/orxonox/overlays/hud/GametypeStatus.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/GametypeStatus.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/GametypeStatus.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -85,6 +85,6 @@
     {
         SUPER(GametypeStatus, changedOwner);
 
-        this->owner_ = dynamic_cast<PlayerInfo*>(this->getOwner());
+        this->owner_ = orxonox_cast<PlayerInfo>(this->getOwner());
     }
 }

Modified: branches/core4/src/orxonox/overlays/hud/HUDHealthBar.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/HUDHealthBar.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/HUDHealthBar.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -93,7 +93,7 @@
     {
         SUPER(HUDHealthBar, changedOwner);
 
-        this->owner_ = dynamic_cast<Pawn*>(this->getOwner());
+        this->owner_ = orxonox_cast<Pawn>(this->getOwner());
     }
 
     void HUDHealthBar::changedOverlayGroup()

Modified: branches/core4/src/orxonox/overlays/hud/HUDRadar.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/HUDRadar.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/HUDRadar.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -163,6 +163,6 @@
     {
         SUPER(HUDRadar, changedOwner);
 
-        this->owner_ = dynamic_cast<Pawn*>(this->getOwner());
+        this->owner_ = orxonox_cast<Pawn>(this->getOwner());
     }
 }

Modified: branches/core4/src/orxonox/overlays/hud/HUDSpeedBar.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/HUDSpeedBar.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/HUDSpeedBar.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -64,6 +64,6 @@
     {
         SUPER(HUDSpeedBar, changedOwner);
 
-        this->owner_ = dynamic_cast<SpaceShip*>(this->getOwner());
+        this->owner_ = orxonox_cast<SpaceShip>(this->getOwner());
     }
 }

Modified: branches/core4/src/orxonox/overlays/hud/HUDTimer.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/HUDTimer.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/HUDTimer.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -67,6 +67,6 @@
     {
         SUPER(HUDTimer, changedOwner);
 
-        this->owner_ = dynamic_cast<ControllableEntity*>(this->getOwner());
+        this->owner_ = orxonox_cast<ControllableEntity>(this->getOwner());
     }
 }

Modified: branches/core4/src/orxonox/overlays/hud/KillMessage.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/KillMessage.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/KillMessage.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -55,6 +55,6 @@
     {
         SUPER(KillMessage, changedOwner);
 
-        this->owner_ = dynamic_cast<PlayerInfo*>(this->getOwner());
+        this->owner_ = orxonox_cast<PlayerInfo>(this->getOwner());
     }
 }

Modified: branches/core4/src/orxonox/overlays/hud/PongScore.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/PongScore.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/PongScore.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -132,7 +132,7 @@
         SUPER(PongScore, changedOwner);
 
         if (this->getOwner() && this->getOwner()->getGametype())
-            this->owner_ = dynamic_cast<Pong*>(this->getOwner()->getGametype());
+            this->owner_ = orxonox_cast<Pong>(this->getOwner()->getGametype());
         else
             this->owner_ = 0;
     }

Modified: branches/core4/src/orxonox/overlays/hud/TeamBaseMatchScore.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/TeamBaseMatchScore.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/TeamBaseMatchScore.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -117,7 +117,7 @@
         SUPER(TeamBaseMatchScore, changedOwner);
 
         if (this->getOwner() && this->getOwner()->getGametype())
-            this->owner_ = dynamic_cast<TeamBaseMatch*>(this->getOwner()->getGametype());
+            this->owner_ = orxonox_cast<TeamBaseMatch>(this->getOwner()->getGametype());
         else
             this->owner_ = 0;
     }

Modified: branches/core4/src/orxonox/overlays/hud/UnderAttackHealthBar.cc
===================================================================
--- branches/core4/src/orxonox/overlays/hud/UnderAttackHealthBar.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/hud/UnderAttackHealthBar.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -72,12 +72,12 @@
     {
         SUPER(UnderAttackHealthBar, changedOwner);
 
-        PlayerInfo* player = dynamic_cast<PlayerInfo*>(this->getOwner());
+        PlayerInfo* player = orxonox_cast<PlayerInfo>(this->getOwner());
         if (player)
         {
             this->owner_ = player;
 
-            UnderAttack* ua = dynamic_cast<UnderAttack*>(player->getGametype());
+            UnderAttack* ua = orxonox_cast<UnderAttack>(player->getGametype());
             if (ua)
             {
                 this->setOwner(ua->getDestroyer());

Modified: branches/core4/src/orxonox/overlays/map/Map.cc
===================================================================
--- branches/core4/src/orxonox/overlays/map/Map.cc	2009-06-23 16:59:43 UTC (rev 3222)
+++ branches/core4/src/orxonox/overlays/map/Map.cc	2009-06-23 17:28:48 UTC (rev 3223)
@@ -358,7 +358,7 @@
         SUPER(Map, changedOwner);
         //COUT(0) << "shipptr" << this->getOwner()->getReverseCamera() << std::endl;
 
-        ControllableEntity* entity = dynamic_cast<ControllableEntity*>(this->getOwner());
+        ControllableEntity* entity = orxonox_cast<ControllableEntity>(this->getOwner());
         if(entity && entity->getReverseCamera())
         {
             //COUT(0) << "foo";




More information about the Orxonox-commit mailing list