Index: code/trunk/src/modules/overlays/hud/CMakeLists.txt
===================================================================
--- code/trunk/src/modules/overlays/hud/CMakeLists.txt	(revision 9259)
+++ code/trunk/src/modules/overlays/hud/CMakeLists.txt	(revision 9348)
@@ -12,5 +12,4 @@
   KillMessage.cc
   DeathMessage.cc
-  UnderAttackHealthBar.cc
   TeamBaseMatchScore.cc
   GametypeStaticMessage.cc
Index: code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.cc	(revision 9259)
+++ code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.cc	(revision 9348)
Index: code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.h	(revision 9259)
+++ code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.h	(revision 9348)
Index: code/trunk/src/modules/overlays/hud/HUDNavigation.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDNavigation.cc	(revision 9259)
+++ code/trunk/src/modules/overlays/hud/HUDNavigation.cc	(revision 9348)
@@ -55,394 +55,373 @@
 namespace orxonox
 {
-bool compareDistance ( std::pair<RadarViewable*, unsigned int > a, std::pair<RadarViewable*, unsigned int > b )
-{
-    return a.second<b.second;
-
-}
-
-void HUDNavigation::setConfigValues()
-{
-  SetConfigValue(markerLimit_, 3);
-  SetConfigValue(showDistance, false);
-}
-
-CreateFactory ( HUDNavigation );
-
-HUDNavigation::HUDNavigation ( BaseObject* creator )
-        : OrxonoxOverlay ( creator )
-{
-    RegisterObject ( HUDNavigation );
-    this->setConfigValues();
-
-    // Set default values
-    this->setFont ( "Monofur" );
-    this->setTextSize ( 0.05f );
-    this->setNavMarkerSize ( 0.05f );
-    this->setDetectionLimit( 10000.0f );
-}
-
-HUDNavigation::~HUDNavigation()
-{
-    if ( this->isInitialized() )
-    {
-        for ( ObjectMap::iterator it = activeObjectList_.begin(); it != activeObjectList_.end(); )
-            removeObject ( ( it++ )->first );
-
-    }
-
-    sortedObjectList_.clear();
-}
-
-void HUDNavigation::XMLPort ( Element& xmlelement, XMLPort::Mode mode )
-{
-    SUPER ( HUDNavigation, XMLPort, xmlelement, mode );
-
-    XMLPortParam ( HUDNavigation, "font",          setFont,          getFont,          xmlelement, mode );
-    XMLPortParam ( HUDNavigation, "textSize",      setTextSize,      getTextSize,      xmlelement, mode );
-    XMLPortParam ( HUDNavigation, "navMarkerSize", setNavMarkerSize, getNavMarkerSize, xmlelement, mode );
-    XMLPortParam ( HUDNavigation, "detectionLimit", setDetectionLimit, getDetectionLimit, xmlelement, mode );
-}
-
-void HUDNavigation::setFont ( const std::string& font )
-{
-    const Ogre::ResourcePtr& fontPtr = Ogre::FontManager::getSingleton().getByName ( font );
-    if ( fontPtr.isNull() )
-    {
-        orxout(internal_warning) << "HUDNavigation: Font '" << font << "' not found" << endl;
-        return;
-    }
-    fontName_ = font;
-    for ( ObjectMap::iterator it = activeObjectList_.begin(); it != activeObjectList_.end(); ++it )
-    {
-        if ( it->second.text_ != NULL )
-            it->second.text_->setFontName ( fontName_ );
-    }
-}
-
-const std::string& HUDNavigation::getFont() const
-{
-    return fontName_;
-}
-
-void HUDNavigation::setTextSize ( float size )
-{
-    if ( size <= 0.0f )
-    {
-        orxout(internal_warning) << "HUDNavigation: Negative font size not allowed" << endl;
-        return;
-    }
-    textSize_ = size;
-    for ( ObjectMap::iterator it = activeObjectList_.begin(); it!=activeObjectList_.end(); ++it )
-    {
-        if ( it->second.text_ )
-            it->second.text_->setCharHeight ( size );
-    }
-}
-
-float HUDNavigation::getTextSize() const
-{
-    return textSize_;
-}
-
-float HUDNavigation::getArrowSizeX(int dist)
-{
-    if (dist < 600)
-        dist = 600;
-    return this->getActualSize().x * 900 * navMarkerSize_ / dist;
-}
-
-float HUDNavigation::getArrowSizeY(int dist)
-{
-    if (dist < 600)
-        dist = 600;
-    return this->getActualSize().y * 900 * navMarkerSize_ / dist;
-}
-
-void HUDNavigation::tick ( float dt )
-{
-    SUPER ( HUDNavigation, tick, dt );
-
-    Camera* cam = CameraManager::getInstance().getActiveCamera();
-    if ( cam == NULL )
-        return;
-    const Matrix4& camTransform = cam->getOgreCamera()->getProjectionMatrix() * cam->getOgreCamera()->getViewMatrix();
-
-
-    for ( sortedList::iterator listIt = sortedObjectList_.begin(); listIt != sortedObjectList_.end(); ++listIt )
-    {
-        listIt->second = ( int ) ( ( listIt->first->getRVWorldPosition() - HumanController::getLocalControllerSingleton()->getControllableEntity()->getWorldPosition() ).length() + 0.5f );
-    }
-
-    sortedObjectList_.sort ( compareDistance );
-
-    unsigned int markerCount_ = 0;
-    bool closeEnough_ = false; //only display objects that are close enough to be relevant for the player
-
-//         for (ObjectMap::iterator it = activeObjectList_.begin(); it != activeObjectList_.end(); ++it)
-    for ( sortedList::iterator listIt = sortedObjectList_.begin(); listIt != sortedObjectList_.end(); ++markerCount_, ++listIt )
-    {
-        ObjectMap::iterator it = activeObjectList_.find ( listIt->first );
-        closeEnough_ = listIt->second < detectionLimit_ ;
-        // display radarviewables on HUD if the marker limit and max-distance is not exceeded
-        if ( markerCount_ < markerLimit_ && (closeEnough_ ||  detectionLimit_ < 0) )
-        {
-
-
-            // Get Distance to HumanController and save it in the TextAreaOverlayElement.
-            int dist = listIt->second;
-            float textLength = 0.0f;
-
-            //display distance next to cursor
-            if (showDistance){
-            it->second.text_->setCaption ( multi_cast<std::string> ( dist ) );
-            textLength = multi_cast<std::string> ( dist ).size() * it->second.text_->getCharHeight() * 0.3f;
-            }
-
-            //display name next to cursor
-            else{
-            it->second.text_->setCaption(it->first->getRadarName());
-            textLength = it->first->getRadarName().size() * it->second.text_->getCharHeight() * 0.3f;
-            }
-
-            // Transform to screen coordinates
-            Vector3 pos = camTransform * it->first->getRVWorldPosition();
-
-            bool outOfView = true;
-            if ( pos.z > 1.0 )
+    bool compareDistance(std::pair<RadarViewable*, unsigned int> a, std::pair<RadarViewable*, unsigned int> b)
+    {
+        return a.second < b.second;
+    }
+
+    CreateFactory ( HUDNavigation );
+
+    HUDNavigation::HUDNavigation(BaseObject* creator) : OrxonoxOverlay(creator)
+    {
+        RegisterObject(HUDNavigation);
+        this->setConfigValues();
+
+        // Set default values
+        this->setFont("Monofur");
+        this->setTextSize(0.05f);
+        this->setNavMarkerSize(0.05f);
+        this->setDetectionLimit(10000.0f);
+    }
+
+    HUDNavigation::~HUDNavigation()
+    {
+        if (this->isInitialized())
+        {
+            for (std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.begin(); it != this->activeObjectList_.end();)
+                removeObject((it++)->first);
+        }
+        this->sortedObjectList_.clear();
+    }
+
+    void HUDNavigation::setConfigValues()
+    {
+        SetConfigValue(markerLimit_, 3);
+        SetConfigValue(showDistance_, false);
+    }
+
+    void HUDNavigation::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(HUDNavigation, XMLPort, xmlelement, mode);
+
+        XMLPortParam(HUDNavigation, "font",           setFont,           getFont,           xmlelement, mode);
+        XMLPortParam(HUDNavigation, "textSize",       setTextSize,       getTextSize,       xmlelement, mode);
+        XMLPortParam(HUDNavigation, "navMarkerSize",  setNavMarkerSize,  getNavMarkerSize,  xmlelement, mode);
+        XMLPortParam(HUDNavigation, "detectionLimit", setDetectionLimit, getDetectionLimit, xmlelement, mode);
+    }
+
+    void HUDNavigation::setFont(const std::string& font)
+    {
+        const Ogre::ResourcePtr& fontPtr = Ogre::FontManager::getSingleton().getByName(font);
+        if (fontPtr.isNull())
+        {
+            orxout(internal_warning) << "HUDNavigation: Font '" << font << "' not found" << endl;
+            return;
+        }
+        this->fontName_ = font;
+        for (std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.begin(); it != this->activeObjectList_.end(); ++it)
+        {
+            if (it->second.text_ != NULL)
+                it->second.text_->setFontName(this->fontName_);
+        }
+    }
+
+    const std::string& HUDNavigation::getFont() const
+    {
+        return this->fontName_;
+    }
+
+    void HUDNavigation::setTextSize(float size)
+    {
+        if (size <= 0.0f)
+        {
+            orxout(internal_warning) << "HUDNavigation: Negative font size not allowed" << endl;
+            return;
+        }
+        this->textSize_ = size;
+        for (std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.begin(); it!=this->activeObjectList_.end(); ++it)
+        {
+            if (it->second.text_)
+                it->second.text_->setCharHeight(size);
+        }
+    }
+
+    float HUDNavigation::getTextSize() const
+    {
+        return this->textSize_;
+    }
+
+    float HUDNavigation::getArrowSizeX(int dist) const
+    {
+        if (dist < 600)
+            dist = 600;
+        return this->getActualSize().x * 900 * this->navMarkerSize_ / dist;
+    }
+
+    float HUDNavigation::getArrowSizeY(int dist) const
+    {
+        if (dist < 600)
+            dist = 600;
+        return this->getActualSize().y * 900 * this->navMarkerSize_ / dist;
+    }
+
+    void HUDNavigation::tick(float dt)
+    {
+        SUPER(HUDNavigation, tick, dt);
+
+        Camera* cam = CameraManager::getInstance().getActiveCamera();
+        if (cam == NULL)
+            return;
+        const Matrix4& camTransform = cam->getOgreCamera()->getProjectionMatrix() * cam->getOgreCamera()->getViewMatrix();
+
+
+        for (std::list<std::pair<RadarViewable*, unsigned int> >::iterator listIt = this->sortedObjectList_.begin(); listIt != this->sortedObjectList_.end(); ++listIt)
+            listIt->second = (int)((listIt->first->getRVWorldPosition() - HumanController::getLocalControllerSingleton()->getControllableEntity()->getWorldPosition()).length() + 0.5f);
+
+        this->sortedObjectList_.sort(compareDistance);
+
+        unsigned int markerCount = 0;
+        bool closeEnough = false; // only display objects that are close enough to be relevant for the player
+
+        for (std::list<std::pair<RadarViewable*, unsigned int> >::iterator listIt = this->sortedObjectList_.begin(); listIt != this->sortedObjectList_.end(); ++markerCount, ++listIt)
+        {
+            std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.find(listIt->first);
+            closeEnough = listIt->second < this->detectionLimit_;
+            // display radarviewables on HUD if the marker limit and max-distance is not exceeded
+            if (markerCount < this->markerLimit_ && (closeEnough ||  this->detectionLimit_ < 0))
             {
-                // z > 1.0 means that the object is behind the camera
-                outOfView = true;
-                // we have to switch all coordinates (if you don't know why,
-                // try linear algebra lectures, because I can't explain..)
-                pos.x = -pos.x;
-                pos.y = -pos.y;
-            }
-            else
-                outOfView = pos.x < -1.0 || pos.x > 1.0 || pos.y < -1.0 || pos.y > 1.0;
-
-            if ( outOfView )
-            {
-                // Object is not in view
-
-                // Change material only if outOfView changed
-                if ( !it->second.wasOutOfView_ )
+                // Get Distance to HumanController and save it in the TextAreaOverlayElement.
+                int dist = listIt->second;
+                float textLength = 0.0f;
+
+                if (this->showDistance_)
                 {
-                    it->second.panel_->setMaterialName( TextureGenerator::getMaterialName( "arrows.png", it->first->getRadarObjectColour()) );
-                    it->second.wasOutOfView_ = true;
+                    //display distance next to cursor
+                    it->second.text_->setCaption(multi_cast<std::string>(dist));
+                    textLength = multi_cast<std::string>(dist).size() * it->second.text_->getCharHeight() * 0.3f;
                 }
-
-                //float xDistScale = this->getActualSize().x * 1000.0f * navMarkerSize_ / dist;
-                //float yDistScale = this->getActualSize().y * 1000.0f * navMarkerSize_ / dist;
-
-                // Adjust Arrowsize according to distance
-                it->second.panel_->setDimensions(getArrowSizeX(dist),getArrowSizeY(dist));
-
-                // Switch between top, bottom, left and right position of the arrow at the screen border
-                if ( pos.x < pos.y )
+                else
                 {
-                    if ( pos.y > -pos.x )
+                    //display name next to cursor
+                    it->second.text_->setCaption(it->first->getRadarName());
+                    textLength = it->first->getRadarName().size() * it->second.text_->getCharHeight() * 0.3f;
+                }
+
+                // Transform to screen coordinates
+                Vector3 pos = camTransform * it->first->getRVWorldPosition();
+
+                bool outOfView = true;
+                if (pos.z > 1.0)
+                {
+                    // z > 1.0 means that the object is behind the camera
+                    outOfView = true;
+                    // we have to switch all coordinates (if you don't know why,
+                    // try linear algebra lectures, because I can't explain..)
+                    pos.x = -pos.x;
+                    pos.y = -pos.y;
+                }
+                else
+                    outOfView = pos.x < -1.0 || pos.x > 1.0 || pos.y < -1.0 || pos.y > 1.0;
+
+                if (outOfView)
+                {
+                    // Object is not in view
+
+                    // Change material only if outOfView changed
+                    if (!it->second.wasOutOfView_)
                     {
-                        // Top
-                        float position = pos.x / pos.y + 1.0f;
-                        it->second.panel_->setPosition ( ( position - it->second.panel_->getWidth() ) * 0.5f, 0.0f );
-                        it->second.panel_->setUV ( 0.5f, 0.0f, 1.0f, 0.5f );
-                        it->second.text_->setLeft ( ( position - textLength ) * 0.5f );
-                        it->second.text_->setTop ( it->second.panel_->getHeight() );
+                        it->second.panel_->setMaterialName(TextureGenerator::getMaterialName("arrows.png", it->first->getRadarObjectColour()));
+                        it->second.wasOutOfView_ = true;
+                    }
+
+                    //float xDistScale = this->getActualSize().x * 1000.0f * this->navMarkerSize_ / dist;
+                    //float yDistScale = this->getActualSize().y * 1000.0f * this->navMarkerSize_ / dist;
+
+                    // Adjust Arrowsize according to distance
+                    it->second.panel_->setDimensions(getArrowSizeX(dist), getArrowSizeY(dist));
+
+                    // Switch between top, bottom, left and right position of the arrow at the screen border
+                    if (pos.x < pos.y)
+                    {
+                        if (pos.y > -pos.x)
+                        {
+                            // Top
+                            float position = pos.x / pos.y + 1.0f;
+                            it->second.panel_->setPosition((position - it->second.panel_->getWidth()) * 0.5f, 0.0f);
+                            it->second.panel_->setUV(0.5f, 0.0f, 1.0f, 0.5f);
+                            it->second.text_->setLeft((position - textLength) * 0.5f);
+                            it->second.text_->setTop(it->second.panel_->getHeight());
+                        }
+                        else
+                        {
+                            // Left
+                            float position = pos.y / pos.x + 1.0f;
+                            it->second.panel_->setPosition(0.0f, (position - it->second.panel_->getWidth()) * 0.5f);
+                            it->second.panel_->setUV(0.0f, 0.0f, 0.5f, 0.5f);
+                            it->second.text_->setLeft(it->second.panel_->getWidth() + 0.01f);
+                            it->second.text_->setTop((position - it->second.text_->getCharHeight()) * 0.5f);
+                        }
                     }
                     else
                     {
-                        // Left
-                        float position = pos.y / pos.x + 1.0f;
-                        it->second.panel_->setPosition ( 0.0f, ( position - it->second.panel_->getWidth() ) * 0.5f );
-                        it->second.panel_->setUV ( 0.0f, 0.0f, 0.5f, 0.5f );
-                        it->second.text_->setLeft ( it->second.panel_->getWidth() + 0.01f );
-                        it->second.text_->setTop ( ( position - it->second.text_->getCharHeight() ) * 0.5f );
+                        if (pos.y < -pos.x)
+                        {
+                            // Bottom
+                            float position = -pos.x / pos.y + 1.0f;
+                            it->second.panel_->setPosition((position - it->second.panel_->getWidth()) * 0.5f, 1.0f - it->second.panel_->getHeight());
+                            it->second.panel_->setUV(0.0f, 0.5f, 0.5f, 1.0f );
+                            it->second.text_->setLeft((position - textLength) * 0.5f);
+                            it->second.text_->setTop(1.0f - it->second.panel_->getHeight() - it->second.text_->getCharHeight());
+                        }
+                        else
+                        {
+                            // Right
+                            float position = -pos.y / pos.x + 1.0f;
+                            it->second.panel_->setPosition(1.0f - it->second.panel_->getWidth(), (position - it->second.panel_->getHeight()) * 0.5f);
+                            it->second.panel_->setUV(0.5f, 0.5f, 1.0f, 1.0f);
+                            it->second.text_->setLeft(1.0f - it->second.panel_->getWidth() - textLength - 0.01f);
+                            it->second.text_->setTop((position - it->second.text_->getCharHeight()) * 0.5f);
+                        }
                     }
                 }
-
                 else
                 {
-
-                    if ( pos.y < -pos.x )
+                    // Object is in view
+
+                    // Change material only if outOfView changed
+                    if (it->second.wasOutOfView_)
                     {
-                        // Bottom
-                        float position = -pos.x / pos.y + 1.0f;
-                        it->second.panel_->setPosition ( ( position - it->second.panel_->getWidth() ) * 0.5f, 1.0f - it->second.panel_->getHeight() );
-                        it->second.panel_->setUV ( 0.0f, 0.5f, 0.5f, 1.0f );
-                        it->second.text_->setLeft ( ( position - textLength ) * 0.5f );
-                        it->second.text_->setTop ( 1.0f - it->second.panel_->getHeight() - it->second.text_->getCharHeight() );
+                        //it->second.panel_->setMaterialName("Orxonox/NavTDC");
+                        it->second.panel_->setMaterialName(TextureGenerator::getMaterialName("tdc.png", it->first->getRadarObjectColour()));
+                        it->second.panel_->setDimensions(this->navMarkerSize_ * this->getActualSize().x, this->navMarkerSize_ * this->getActualSize().y);
+                        it->second.wasOutOfView_ = false;
                     }
-                    else
-                    {
-                        // Right
-                        float position = -pos.y / pos.x + 1.0f;
-                        it->second.panel_->setPosition ( 1.0f - it->second.panel_->getWidth(), ( position - it->second.panel_->getHeight() ) * 0.5f );
-                        it->second.panel_->setUV ( 0.5f, 0.5f, 1.0f, 1.0f );
-                        it->second.text_->setLeft ( 1.0f - it->second.panel_->getWidth() - textLength - 0.01f );
-                        it->second.text_->setTop ( ( position - it->second.text_->getCharHeight() ) * 0.5f );
-                    }
+
+                    // Position marker
+                    it->second.panel_->setUV(0.0f, 0.0f, 1.0f, 1.0f);
+                    it->second.panel_->setLeft((pos.x + 1.0f - it->second.panel_->getWidth()) * 0.5f);
+                    it->second.panel_->setTop((-pos.y + 1.0f - it->second.panel_->getHeight()) * 0.5f);
+
+                    // Position text
+                    it->second.text_->setLeft((pos.x + 1.0f + it->second.panel_->getWidth()) * 0.5f);
+                    it->second.text_->setTop((-pos.y + 1.0f + it->second.panel_->getHeight()) * 0.5f);
                 }
+
+                // Make sure the overlays are shown
+                it->second.panel_->show();
+                it->second.text_->show();
             }
-            else
+            else // do not display on HUD
             {
-                // Object is in view
-
-                // Change material only if outOfView changed
-                if ( it->second.wasOutOfView_ )
-                {
-                  //it->second.panel_->setMaterialName ( "Orxonox/NavTDC" );
-                    it->second.panel_->setMaterialName( TextureGenerator::getMaterialName( "tdc.png", it->first->getRadarObjectColour()) );
-                    it->second.panel_->setDimensions ( navMarkerSize_ * this->getActualSize().x, navMarkerSize_ * this->getActualSize().y );
-                    it->second.wasOutOfView_ = false;
-                }
-
-                // Position marker
-                it->second.panel_->setUV ( 0.0f, 0.0f, 1.0f, 1.0f );
-                it->second.panel_->setLeft ( ( pos.x + 1.0f - it->second.panel_->getWidth() ) * 0.5f );
-                it->second.panel_->setTop ( ( -pos.y + 1.0f - it->second.panel_->getHeight() ) * 0.5f );
-
-                // Position text
-                it->second.text_->setLeft ( ( pos.x + 1.0f + it->second.panel_->getWidth() ) * 0.5f );
-                it->second.text_->setTop ( ( -pos.y + 1.0f + it->second.panel_->getHeight() ) * 0.5f );
+                it->second.panel_->hide();
+                it->second.text_->hide();
             }
-
-            // Make sure the overlays are shown
-            it->second.panel_->show();
-            it->second.text_->show();
-        }
-        else // do not display on HUD
-        {
-            it->second.panel_->hide();
-            it->second.text_->hide();
-        }
-
+        }
+    }
+
+    /** Overridden method of OrxonoxOverlay.
+    @details
+        Usually the entire overlay scales with scale().
+        Here we obviously have to adjust this.
+    */
+    void HUDNavigation::sizeChanged()
+    {
+        // Use size to compensate for aspect ratio if enabled.
+        float xScale = this->getActualSize().x;
+        float yScale = this->getActualSize().y;
+
+        for (std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.begin(); it != this->activeObjectList_.end(); ++it)
+        {
+            if (it->second.panel_ != NULL)
+                it->second.panel_->setDimensions(this->navMarkerSize_ * xScale, this->navMarkerSize_ * yScale);
+            if (it->second.text_ != NULL)
+                it->second.text_->setCharHeight(it->second.text_->getCharHeight() * yScale);
+        }
+    }
+
+    void HUDNavigation::addObject(RadarViewable* object)
+    {
+        if (showObject(object) == false)
+            return;
+
+        if (this->activeObjectList_.size() >= this->markerLimit_)
+            if (object == NULL)
+                return;
+
+        // Object hasn't been added yet (we know that)
+        assert(this->activeObjectList_.find(object) == this->activeObjectList_.end());
+
+        // Scales used for dimensions and text size
+        float xScale = this->getActualSize().x;
+        float yScale = this->getActualSize().y;
+
+        // Create everything needed to display the object on the radar and add it to the map
+
+        // Create arrow/marker
+        Ogre::PanelOverlayElement* panel = static_cast<Ogre::PanelOverlayElement*>( Ogre::OverlayManager::getSingleton()
+                                           .createOverlayElement("Panel", "HUDNavigation_navMarker_" + getUniqueNumberString()));
+        //panel->setMaterialName("Orxonox/NavTDC");
+        panel->setMaterialName(TextureGenerator::getMaterialName("tdc.png", object->getRadarObjectColour()));
+        panel->setDimensions(this->navMarkerSize_ * xScale, this->navMarkerSize_ * yScale);
+        //panel->setColour(object->getRadarObjectColour());
+
+        Ogre::TextAreaOverlayElement* text = static_cast<Ogre::TextAreaOverlayElement*>( Ogre::OverlayManager::getSingleton()
+                                             .createOverlayElement("TextArea", "HUDNavigation_navText_" + getUniqueNumberString()));
+        text->setFontName(this->fontName_);
+        text->setCharHeight(text->getCharHeight() * yScale);
+        text->setColour(object->getRadarObjectColour());
+
+        panel->hide();
+        text->hide();
+
+        ObjectInfo tempStruct = {panel, text, false /*, TODO: initialize wasOutOfView_ */};
+        this->activeObjectList_[object] = tempStruct;
+
+        this->background_->addChild(panel);
+        this->background_->addChild(text);
+
+        this->sortedObjectList_.push_front(std::make_pair(object, (unsigned int)0));
+    }
+
+    void HUDNavigation::removeObject(RadarViewable* viewable)
+    {
+        std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.find(viewable);
+
+        if (this->activeObjectList_.find(viewable) != this->activeObjectList_.end())
+        {
+            // Detach overlays
+            this->background_->removeChild(it->second.panel_->getName());
+            this->background_->removeChild(it->second.text_->getName());
+            // Properly destroy the overlay elements (do not use delete!)
+            Ogre::OverlayManager::getSingleton().destroyOverlayElement(it->second.panel_);
+            Ogre::OverlayManager::getSingleton().destroyOverlayElement(it->second.text_);
+            // Remove from the list
+            this->activeObjectList_.erase(viewable);
+        }
+
+        for (std::list<std::pair<RadarViewable*, unsigned int> >::iterator listIt = this->sortedObjectList_.begin(); listIt != this->sortedObjectList_.end(); ++listIt)
+        {
+            if ((listIt->first) == viewable)
+            {
+                this->sortedObjectList_.erase(listIt);
+                break;
+            }
+        }
+    }
+
+    void HUDNavigation::objectChanged(RadarViewable* viewable)
+    {
+        // TODO: niceification neccessary ;)
+        removeObject(viewable);
+        addObject(viewable);
+    }
+
+    bool HUDNavigation::showObject(RadarViewable* rv)
+    {
+        if (rv == orxonox_cast<RadarViewable*>(this->getOwner()))
+            return false;
+        assert(rv->getWorldEntity());
+        if (rv->getWorldEntity()->isVisible() == false || rv->getRadarVisibility() == false)
+            return false;
+        return true;
+    }
+
+    void HUDNavigation::changedOwner()
+    {
+        const std::set<RadarViewable*>& respawnObjects = this->getOwner()->getScene()->getRadar()->getRadarObjects();
+        for (std::set<RadarViewable*>::const_iterator it = respawnObjects.begin(); it != respawnObjects.end(); ++it)
+        {
+            if (!(*it)->isHumanShip_)
+                this->addObject(*it);
+        }
     }
 }
-
-
-/** Overridden method of OrxonoxOverlay.
-@details
-    Usually the entire overlay scales with scale().
-    Here we obviously have to adjust this.
-*/
-void HUDNavigation::sizeChanged()
-{
-    // Use size to compensate for aspect ratio if enabled.
-    float xScale = this->getActualSize().x;
-    float yScale = this->getActualSize().y;
-
-    for ( ObjectMap::iterator it = activeObjectList_.begin(); it!=activeObjectList_.end(); ++it )
-    {
-        if ( it->second.panel_ != NULL )
-            it->second.panel_->setDimensions ( navMarkerSize_ * xScale, navMarkerSize_ * yScale );
-        if ( it->second.text_ != NULL )
-            it->second.text_->setCharHeight ( it->second.text_->getCharHeight() * yScale );
-    }
-}
-
-void HUDNavigation::addObject ( RadarViewable* object )
-{
-    if( showObject(object)==false )
-        return;
-
-    if ( activeObjectList_.size() >= markerLimit_ )
-        if ( object == NULL )
-            return;
-
-    // Object hasn't been added yet (we know that)
-    assert ( this->activeObjectList_.find ( object ) == this->activeObjectList_.end() );
-
-    // Scales used for dimensions and text size
-    float xScale = this->getActualSize().x;
-    float yScale = this->getActualSize().y;
-
-    // Create everything needed to display the object on the radar and add it to the map
-
-    // Create arrow/marker
-    Ogre::PanelOverlayElement* panel = static_cast<Ogre::PanelOverlayElement*> ( Ogre::OverlayManager::getSingleton()
-                                       .createOverlayElement ( "Panel", "HUDNavigation_navMarker_" + getUniqueNumberString() ) );
-//     panel->setMaterialName ( "Orxonox/NavTDC" );
-    panel->setMaterialName( TextureGenerator::getMaterialName( "tdc.png", object->getRadarObjectColour()) );
-    panel->setDimensions ( navMarkerSize_ * xScale, navMarkerSize_ * yScale );
-//     panel->setColour( object->getRadarObjectColour() );
-
-    Ogre::TextAreaOverlayElement* text = static_cast<Ogre::TextAreaOverlayElement*> ( Ogre::OverlayManager::getSingleton()
-                                         .createOverlayElement ( "TextArea", "HUDNavigation_navText_" + getUniqueNumberString() ) );
-    text->setFontName ( this->fontName_ );
-    text->setCharHeight ( text->getCharHeight() * yScale );
-    text->setColour( object->getRadarObjectColour() );
-
-    panel->hide();
-    text->hide();
-
-    ObjectInfo tempStruct = {panel, text, false /*, TODO: initialize wasOutOfView_ */};
-    activeObjectList_[object] = tempStruct;
-
-    this->background_->addChild ( panel );
-    this->background_->addChild ( text );
-
-    sortedObjectList_.push_front ( std::make_pair ( object, ( unsigned int ) 0 ) );
-
-
-}
-
-void HUDNavigation::removeObject ( RadarViewable* viewable )
-{
-    ObjectMap::iterator it = activeObjectList_.find ( viewable );
-
-    if ( activeObjectList_.find ( viewable ) != activeObjectList_.end() )
-    {
-        // Detach overlays
-        this->background_->removeChild ( it->second.panel_->getName() );
-        this->background_->removeChild ( it->second.text_->getName() );
-        // Properly destroy the overlay elements (do not use delete!)
-        Ogre::OverlayManager::getSingleton().destroyOverlayElement ( it->second.panel_ );
-        Ogre::OverlayManager::getSingleton().destroyOverlayElement ( it->second.text_ );
-        // Remove from the list
-        activeObjectList_.erase ( viewable );
-
-
-    }
-
-    for ( sortedList::iterator listIt = sortedObjectList_.begin(); listIt != sortedObjectList_.end(); ++listIt )
-    {
-        if ( (listIt->first) == viewable )
-        {
-            sortedObjectList_.erase ( listIt );
-            break;
-        }
-
-    }
-
-}
-
-void HUDNavigation::objectChanged(RadarViewable* viewable)
-{
-    // TODO: niceification neccessary ;)
-    removeObject(viewable);
-    addObject(viewable);
-}
-
-
-bool HUDNavigation::showObject(RadarViewable* rv)
-{
-    if ( rv == dynamic_cast<RadarViewable*> ( this->getOwner() ) )
-        return false;
-    assert( rv->getWorldEntity() );
-    if ( rv->getWorldEntity()->isVisible()==false || rv->getRadarVisibility()==false )
-        return false;
-    return true;
-}
-
-void HUDNavigation::changedOwner()
-{
-
-    const std::set<RadarViewable*>& respawnObjects = this->getOwner()->getScene()->getRadar()->getRadarObjects();
-    for ( std::set<RadarViewable*>::const_iterator it = respawnObjects.begin(); it != respawnObjects.end(); ++it )
-    {
-        if ( ! ( *it )->isHumanShip_ )
-            this->addObject ( *it );
-    }
-}
-
-}
Index: code/trunk/src/modules/overlays/hud/HUDNavigation.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDNavigation.h	(revision 9259)
+++ code/trunk/src/modules/overlays/hud/HUDNavigation.h	(revision 9348)
@@ -36,5 +36,4 @@
 #include <string>
 
-
 #include "util/OgreForwardRefs.h"
 #include "tools/interfaces/Tickable.h"
@@ -44,77 +43,76 @@
 namespace orxonox
 {
-class _OverlaysExport HUDNavigation : public OrxonoxOverlay, public Tickable, public RadarListener
-{
-public:
-    HUDNavigation ( BaseObject* creator );
-    virtual ~HUDNavigation();
+    class _OverlaysExport HUDNavigation : public OrxonoxOverlay, public Tickable, public RadarListener
+    {
+        public:
+            HUDNavigation(BaseObject* creator);
+            virtual ~HUDNavigation();
 
-    void setConfigValues();
+            void setConfigValues();
 
-    virtual void XMLPort ( Element& xmlelement, XMLPort::Mode mode );
-    virtual void tick ( float dt );
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt);
 
-    // RadarListener interface
-    virtual void addObject ( RadarViewable* object );
-    virtual void removeObject ( RadarViewable* viewable );
-    virtual void objectChanged ( RadarViewable* viewable );
+            // RadarListener interface
+            virtual void addObject(RadarViewable* object);
+            virtual void removeObject(RadarViewable* viewable);
+            virtual void objectChanged(RadarViewable* viewable);
 
-    virtual void changedOwner();
-    virtual void sizeChanged();
-    virtual void angleChanged() { }
-    virtual void positionChanged() { }
-    virtual void radarTick ( float dt ) {}
+            virtual void changedOwner();
+            virtual void sizeChanged();
+            virtual void angleChanged() { }
+            virtual void positionChanged() { }
+            virtual void radarTick(float dt) {}
 
-    inline float getRadarSensitivity() const
-    { return 1.0f; }
+            inline float getRadarSensitivity() const
+                { return 1.0f; }
 
-    unsigned int getMarkerLimit() { return this->markerLimit_; }
+            inline unsigned int getMarkerLimit() const
+                { return this->markerLimit_; }
 
-private:
-    struct ObjectInfo
-    {
-        Ogre::PanelOverlayElement* panel_;
-        Ogre::TextAreaOverlayElement* text_;
-        bool outOfView_;
-        bool wasOutOfView_;
+        private:
+            struct ObjectInfo
+            {
+                Ogre::PanelOverlayElement* panel_;
+                Ogre::TextAreaOverlayElement* text_;
+                bool outOfView_;
+                bool wasOutOfView_;
+            };
 
+            bool showObject(RadarViewable* rv);
+
+            // XMLPort accessors
+            inline void setNavMarkerSize(float size)
+            {
+                navMarkerSize_ = size;
+                this->sizeChanged();
+            }
+            inline float getNavMarkerSize() const
+                { return navMarkerSize_; }
+            inline void setDetectionLimit(float limit)
+                { this->detectionLimit_ = limit; }
+            inline float getDetectionLimit() const
+                { return this->detectionLimit_; }
+
+            void setTextSize(float size);
+            float getTextSize() const;
+
+            void setFont(const std::string& font);
+            const std::string& getFont() const;
+
+            float getArrowSizeX(int dist) const;
+            float getArrowSizeY(int dist) const;
+
+            std::map<RadarViewable*, ObjectInfo> activeObjectList_;
+            std::list<std::pair<RadarViewable*, unsigned int> > sortedObjectList_;
+
+            float navMarkerSize_;
+            std::string fontName_;
+            float textSize_;
+            bool showDistance_;
+
+            unsigned int markerLimit_;
+            float detectionLimit_; //!< Objects that are more far away than detectionLimit_ are not displayed on the HUD. 10000.0f is the default value.
     };
-
-    bool showObject( RadarViewable* rv );
-
-    // XMLPort accessors
-    void setNavMarkerSize ( float size )
-        { navMarkerSize_ = size; this->sizeChanged(); }
-    float getNavMarkerSize() const
-        { return navMarkerSize_; }
-    void setDetectionLimit( float limit ) 
-        { this->detectionLimit_ = limit; } 
-    float getDetectionLimit() const 
-        { return this->detectionLimit_; }
-
-    void setTextSize ( float size );
-    float getTextSize() const;
-
-    void setFont ( const std::string& font );
-    const std::string& getFont() const;
-
-    typedef std::map<RadarViewable*, ObjectInfo > ObjectMap;
-    ObjectMap activeObjectList_;
-
-    typedef std::list < std::pair<RadarViewable*, unsigned int > > sortedList;
-    sortedList sortedObjectList_;
-
-    float getArrowSizeX(int dist);    
-    float getArrowSizeY(int dist);
-
-    float navMarkerSize_;
-    std::string fontName_;
-    float textSize_;
-    bool showDistance;
-
-    unsigned int markerLimit_;
-    float detectionLimit_; //!< Objects that are more far away than detectionLimit_ are not displayed on the HUD. 10000.0f is the default value. 
-
-};
 }
 
Index: code/trunk/src/modules/overlays/hud/HUDRadar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDRadar.cc	(revision 9259)
+++ code/trunk/src/modules/overlays/hud/HUDRadar.cc	(revision 9348)
@@ -92,5 +92,5 @@
     void HUDRadar::addObject(RadarViewable* object)
     {
-        if (object == dynamic_cast<RadarViewable*>(this->owner_))
+        if (object == orxonox_cast<RadarViewable*>(this->owner_))
             return;
         if( showObject(object) == false ) //do not show objects that are "invisible" or "radar invisible"
@@ -189,5 +189,5 @@
     bool HUDRadar::showObject(RadarViewable* rv)
     {
-        if ( rv == dynamic_cast<RadarViewable*> ( this->getOwner() ) )
+        if ( rv == orxonox_cast<RadarViewable*> ( this->getOwner() ) )
             return false;
         assert( rv->getWorldEntity() );
Index: code/trunk/src/modules/overlays/hud/UnderAttackHealthBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/UnderAttackHealthBar.cc	(revision 9259)
+++ 	(revision )
@@ -1,108 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#include "UnderAttackHealthBar.h"
-
-#include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
-#include "infos/PlayerInfo.h"
-#include "gametypes/UnderAttack.h"
-#include "worldentities/pawns/Destroyer.h"
-#include "overlays/OverlayGroup.h"
-
-namespace orxonox
-{
-    CreateFactory(UnderAttackHealthBar);
-
-    UnderAttackHealthBar::UnderAttackHealthBar(BaseObject* creator) : HUDHealthBar(creator)
-    {
-        RegisterObject(UnderAttackHealthBar);
-
-        this->owner_ = 0;
-
-        this->text_ = new OverlayText(this);
-        this->text_->setFont("Monofur");
-        this->text_->setTextSize(0.04f);
-        this->text_->setAlignmentString("center");
-        this->text_->setColour(ColourValue::White);
-        this->text_->setPickPoint(Vector2(0.5, 0));
-
-        this->inittimer_.setTimer(0.0f, false, createExecutor(createFunctor(&UnderAttackHealthBar::init, this)));
-    }
-
-    UnderAttackHealthBar::~UnderAttackHealthBar()
-    {
-        if (this->isInitialized())
-        {
-            this->text_->destroy();
-            this->text_ = 0;
-        }
-    }
-
-    void UnderAttackHealthBar::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(UnderAttackHealthBar, XMLPort, xmlelement, mode);
-
-        XMLPortParam(UnderAttackHealthBar, "descriptionpickpoint", setDescriptionPickPoint, getDescriptionPickPoint, xmlelement, mode);
-        XMLPortParam(UnderAttackHealthBar, "descriptionoffset", setDescriptionOffset, getDescriptionOffset, xmlelement, mode);
-    }
-
-    void UnderAttackHealthBar::changedOwner()
-    {
-        SUPER(UnderAttackHealthBar, changedOwner);
-
-        PlayerInfo* player = orxonox_cast<PlayerInfo*>(this->getOwner());
-        if (player)
-        {
-            this->owner_ = player;
-
-            UnderAttack* ua = orxonox_cast<UnderAttack*>(player->getGametype().get());
-            if (ua)
-            {
-                this->setOwner(ua->getDestroyer());
-
-                if (ua->getTeam(player) == 0)
-                    this->text_->setCaption("Attack the Transporter!");
-                else
-                    this->text_->setCaption("Defend the Transporter!");
-            }
-        }
-    }
-
-    void UnderAttackHealthBar::changedOverlayGroup()
-    {
-        SUPER(UnderAttackHealthBar, changedOverlayGroup);
-
-        this->getOverlayGroup()->addElement(this->text_.get());
-    }
-
-    void UnderAttackHealthBar::init()
-    {
-        this->setOwner(this->owner_);
-    }
-}
Index: code/trunk/src/modules/overlays/hud/UnderAttackHealthBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/UnderAttackHealthBar.h	(revision 9259)
+++ 	(revision )
@@ -1,68 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#ifndef _UnderAttackHealthBar_H__
-#define _UnderAttackHealthBar_H__
-
-#include "overlays/OverlaysPrereqs.h"
-
-#include "util/Math.h"
-#include "tools/Timer.h"
-#include "HUDHealthBar.h"
-
-namespace orxonox
-{
-    class _OverlaysExport UnderAttackHealthBar : public HUDHealthBar
-    {
-        public:
-            UnderAttackHealthBar(BaseObject* creator);
-            virtual ~UnderAttackHealthBar();
-
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner();
-            virtual void changedOverlayGroup();
-
-            inline void setDescriptionPickPoint(const Vector2& pickpoint)
-                { this->text_->setPickPoint(pickpoint); }
-            inline Vector2 getDescriptionPickPoint() const
-                { return this->text_->getPickPoint(); }
-
-            inline void setDescriptionOffset(const Vector2& position)
-                { this->text_->setPosition(this->getPosition() + (position - this->getPickPoint()) * this->getSize()); }
-            inline Vector2 getDescriptionOffset() const
-                { return (this->text_->getPosition() - this->getPosition()) / this->getSize() + this->getPickPoint(); }
-
-        private:
-            void init();
-
-            PlayerInfo* owner_;
-            SmartPtr<OverlayText> text_;
-            Timer inittimer_;
-    };
-}
-#endif /* _UnderAttackHealthBar_H__ */
