[Orxonox-commit 2208] r6924 - code/branches/hudelements/src/modules/overlays/hud
rgrieder at orxonox.net
rgrieder at orxonox.net
Tue May 18 17:34:48 CEST 2010
Author: rgrieder
Date: 2010-05-18 17:34:48 +0200 (Tue, 18 May 2010)
New Revision: 6924
Modified:
code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.cc
code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.h
Log:
Clean up in HUDNavigation, no actual code changes.
Modified: code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.cc
===================================================================
--- code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.cc 2010-05-18 12:22:51 UTC (rev 6923)
+++ code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.cc 2010-05-18 15:34:48 UTC (rev 6924)
@@ -27,13 +27,13 @@
*/
#include "HUDNavigation.h"
-#include <utility>
-#include <string>
#include <OgreCamera.h>
+#include <OgreFontManager.h>
#include <OgreOverlayManager.h>
#include <OgreTextAreaOverlayElement.h>
#include <OgrePanelOverlayElement.h>
+
#include "util/Math.h"
#include "util/Convert.h"
#include "core/CoreIncludes.h"
@@ -49,197 +49,141 @@
namespace orxonox
{
-CreateFactory(HUDNavigation);
+ CreateFactory(HUDNavigation);
-HUDNavigation::HUDNavigation(BaseObject* creator)
+ HUDNavigation::HUDNavigation(BaseObject* creator)
: OrxonoxOverlay(creator)
-{
- RegisterObject(HUDNavigation);
+ {
+ RegisterObject(HUDNavigation);
- setFont("Monofur");
- setTextSize(0.05f);
- setNavMarkerSize(0.05f);
+ // Set default values
+ setFont("Monofur");
+ setTextSize(0.05f);
+ setNavMarkerSize(0.05f);
+ }
-
-
-// // create nav text
-// navText_ = static_cast<Ogre::TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton()
-// .createOverlayElement("TextArea", "HUDNavigation_navText_" + getUniqueNumberString()));
-//
-// // create nav marker
-// navMarker_ = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
-// .createOverlayElement("Panel", "HUDNavigation_navMarker_" + getUniqueNumberString()));
-// navMarker_->setMaterialName("Orxonox/NavArrows");
-
- /*
- // create aim marker
- aimMarker_ = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
- .createOverlayElement("Panel", "HUDNavigation_aimMarker_" + getUniqueNumberString()));
- aimMarker_->setMaterialName("Orxonox/NavCrosshair");
- this->wasOutOfView_ = true; // Ensure the material is changed right the first time..
-
-
- */
- /*
- background_->addChild(navMarker_);*/
-// background_->addChild(aimMarker_);
-// background_->addChild(navText_);
-
- // hide at first
-// this->setVisible(false);
-
-
-
-// setAimMarkerSize(0.04f);
-
-}
-
-HUDNavigation::~HUDNavigation()
-{
- if (this->isInitialized())
+ HUDNavigation::~HUDNavigation()
{
- for (activeObjectListType::iterator it = activeObjectList_.begin(); it != activeObjectList_.end();)
- removeObject((it++)->first);
+ if (this->isInitialized())
+ {
+ for (ObjectMap::iterator it = activeObjectList_.begin(); it != activeObjectList_.end();)
+ removeObject((it++)->first);
+ }
}
-}
-void HUDNavigation::XMLPort(Element& xmlElement, XMLPort::Mode mode)
-{
- SUPER(HUDNavigation, XMLPort, xmlElement, mode);
+ 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, "aimMarkerSize", setAimMarkerSize, getAimMarkerSize, xmlElement, mode);
-}
+ XMLPortParam(HUDNavigation, "font", setFont, getFont, xmlElement, mode);
+ XMLPortParam(HUDNavigation, "textSize", setTextSize, getTextSize, xmlElement, mode);
+ XMLPortParam(HUDNavigation, "navMarkerSize", setNavMarkerSize, getNavMarkerSize, xmlElement, mode);
+ }
-void HUDNavigation::setFont(const std::string& font)
-{
- fontName_ = font;
- if (!activeObjectList_.empty())
+ void HUDNavigation::setFont(const std::string& font)
{
- for (tempRadarViewable = activeObjectList_.begin(); tempRadarViewable!=activeObjectList_.end(); ++tempRadarViewable)
+ const Ogre::ResourcePtr& fontPtr = Ogre::FontManager::getSingleton().getByName(font);
+ if (fontPtr.isNull())
{
- if (tempRadarViewable->second.text_ && !fontName_.empty())
- tempRadarViewable->second.text_->setFontName(fontName_);
+ COUT(2) << "Warning: HUDNavigation: Font '" << font << "' not found" << std::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_;
-}
+ const std::string& HUDNavigation::getFont() const
+ {
+ return fontName_;
+ }
-void HUDNavigation::setTextSize(float size)
-{
- textSize_ = size;
- if (!activeObjectList_.empty())
+ void HUDNavigation::setTextSize(float size)
{
- for (tempRadarViewable = activeObjectList_.begin(); tempRadarViewable!=activeObjectList_.end(); ++tempRadarViewable)
+ if (size <= 0.0f)
{
- if (tempRadarViewable->second.text_ && size >= 0.0f)
- tempRadarViewable->second.text_->setCharHeight(size);
+ COUT(2) << "Warning: HUDNavigation: Negative font size not allowed" << std::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::getTextSize() const
+ {
+ return textSize_;
+ }
-void HUDNavigation::tick(float dt)
-{
- SUPER(HUDNavigation, tick, dt);
+ void HUDNavigation::tick(float dt)
+ {
+ SUPER(HUDNavigation, tick, dt);
-// updateActiveObjectList(activeObjectList_);
+ Camera* cam = CameraManager::getInstance().getActiveCamera();
+ if (cam == NULL)
+ return;
+ const Matrix4& camTransform = cam->getOgreCamera()->getProjectionMatrix() * cam->getOgreCamera()->getViewMatrix();
- // Get radar
-// Radar* radar = this->getOwner()->getScene()->getRadar();
-//
-// if (!radar->getFocus())
-// {
-// this->overlay_->hide();
-// return;
-// }
-// else
-// {
-// this->overlay_->show();
-// }
-
- // set text
-// int dist = static_cast<int>(getDist2Focus());
-// navText_->setCaption(multi_cast<std::string>(dist));
-// float textLength = multi_cast<std::string>(dist).size() * navText_->getCharHeight() * 0.3f;
-
- if (!activeObjectList_.empty())
- {
- for (tempRadarViewable = activeObjectList_.begin(); tempRadarViewable!=activeObjectList_.end(); ++tempRadarViewable)
+ for (ObjectMap::iterator it = activeObjectList_.begin(); it != activeObjectList_.end(); ++it)
{
+ // Get Distance to HumanController and save it in the TextAreaOverlayElement.
+ int dist = (int)((it->first->getRVWorldPosition() - HumanController::getLocalControllerEntityAsPawn()->getWorldPosition()).length() + 0.5f);
+ it->second.text_->setCaption(multi_cast<std::string>(dist));
+ float textLength = multi_cast<std::string>(dist).size() * it->second.text_->getCharHeight() * 0.3f;
+ // Transform to screen coordinates
+ Vector3 pos = camTransform * it->first->getRVWorldPosition();
- //get Distance to HumanController and save it in the TextAreaOverlayElement.
- int dist = (int)(tempRadarViewable->first->getRVWorldPosition() - HumanController::getLocalControllerEntityAsPawn()->getWorldPosition()).length();
- tempRadarViewable->second.text_->setCaption(multi_cast<std::string>(dist));
- float textLength = multi_cast<std::string>(dist).size() * tempRadarViewable->second.text_->getCharHeight() * 0.3f;
-
-
-
- orxonox::Camera* cam = CameraManager::getInstance().getActiveCamera();
- if (!cam)
- return;
- const Matrix4& transform = cam->getOgreCamera()->getProjectionMatrix() * cam->getOgreCamera()->getViewMatrix();
- // transform to screen coordinates
- Vector3 pos = transform * tempRadarViewable->first->getRVWorldPosition();
-
-
-
-
+ bool outOfView = true;
if (pos.z > 1.0)
{
// z > 1.0 means that the object is behind the camera
- tempRadarViewable->second.outOfView_ = true;
+ 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
- tempRadarViewable->second.outOfView_ = pos.x < -1.0 || pos.x > 1.0 || pos.y < -1.0 || pos.y > 1.0;
+ outOfView = pos.x < -1.0 || pos.x > 1.0 || pos.y < -1.0 || pos.y > 1.0;
- if (tempRadarViewable->second.outOfView_)
+ if (outOfView)
{
- // object is not in view
-// aimMarker_->hide();
+ // Object is not in view
- if (!tempRadarViewable->second.wasOutOfView_)
+ // Change material only if outOfView changed
+ if (!it->second.wasOutOfView_)
{
- tempRadarViewable->second.panel_->setMaterialName("Orxonox/NavArrows");
- tempRadarViewable->second.wasOutOfView_ = true;
+ it->second.panel_->setMaterialName("Orxonox/NavArrows");
+ it->second.wasOutOfView_ = true;
}
-
-
+ // 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)
{
- // up
+ // Top
float position = pos.x / pos.y + 1.0f;
- tempRadarViewable->second.panel_->setPosition((position - tempRadarViewable->second.panel_->getWidth()) * 0.5f, 0.0f);
- tempRadarViewable->second.panel_->setUV(0.5f, 0.0f, 1.0f, 0.5f);
- tempRadarViewable->second.text_->setLeft((position - textLength) * 0.5f);
- tempRadarViewable->second.text_->setTop(tempRadarViewable->second.panel_->getHeight());
+ 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
+ // Left
float position = pos.y / pos.x + 1.0f;
- tempRadarViewable->second.panel_->setPosition(0.0f, (position - tempRadarViewable->second.panel_->getWidth()) * 0.5f);
- tempRadarViewable->second.panel_->setUV(0.0f, 0.0f, 0.5f, 0.5f);
- tempRadarViewable->second.text_->setLeft(tempRadarViewable->second.panel_->getWidth() + 0.01f);
- tempRadarViewable->second.text_->setTop((position - tempRadarViewable->second.text_->getCharHeight()) * 0.5f);
+ 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
@@ -247,179 +191,135 @@
if (pos.y < -pos.x)
{
- // down
+ // Bottom
float position = -pos.x / pos.y + 1.0f;
- tempRadarViewable->second.panel_->setPosition((position - tempRadarViewable->second.panel_->getWidth()) * 0.5f, 1.0f - tempRadarViewable->second.panel_->getHeight());
- tempRadarViewable->second.panel_->setUV(0.0f, 0.5f, 0.5f, 1.0f);
- tempRadarViewable->second.text_->setLeft((position - textLength) * 0.5f);
- tempRadarViewable->second.text_->setTop(1.0f - tempRadarViewable->second.panel_->getHeight() - tempRadarViewable->second.text_->getCharHeight());
+ 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
+ // Right
float position = -pos.y / pos.x + 1.0f;
- tempRadarViewable->second.panel_->setPosition(1.0f - tempRadarViewable->second.panel_->getWidth(), (position - tempRadarViewable->second.panel_->getHeight()) * 0.5f);
- tempRadarViewable->second.panel_->setUV(0.5f, 0.5f, 1.0f, 1.0f);
- tempRadarViewable->second.text_->setLeft(1.0f - tempRadarViewable->second.panel_->getWidth() - textLength - 0.01f);
- tempRadarViewable->second.text_->setTop((position - tempRadarViewable->second.text_->getCharHeight()) * 0.5f);
+ 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
{
+ // Object is in view
-
- // object is in view
- /*
- Vector3 aimpos = transform * getPredictedPosition(SpaceShip::getLocalShip()->getPosition(),
- Projectile::getSpeed(), Radar::getInstance().getFocus()->getRVWorldPosition(), Radar::getInstance().getFocus()->getRVOrientedVelocity());
- */
- if (tempRadarViewable->second.wasOutOfView_)
+ // Change material only if outOfView changed
+ if (it->second.wasOutOfView_)
{
- tempRadarViewable->second.panel_->setMaterialName("Orxonox/NavTDC");
- tempRadarViewable->second.wasOutOfView_ = false;
+ it->second.panel_->setMaterialName("Orxonox/NavTDC");
+ it->second.wasOutOfView_ = false;
}
- // object is in view
- tempRadarViewable->second.panel_->setUV(0.0f, 0.0f, 1.0f, 1.0f);
- tempRadarViewable->second.panel_->setLeft((pos.x + 1.0f - tempRadarViewable->second.panel_->getWidth()) * 0.5f);
- tempRadarViewable->second.panel_->setTop((-pos.y + 1.0f - tempRadarViewable->second.panel_->getHeight()) * 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);
-
-// aimMarker_->show();
-// aimMarker_->setLeft((aimpos.x + 1.0f - aimMarker_->getWidth()) * 0.5f);
-// aimMarker_->setTop((-aimpos.y + 1.0f - aimMarker_->getHeight()) * 0.5f);
-//
- tempRadarViewable->second.text_->setLeft((pos.x + 1.0f + tempRadarViewable->second.panel_->getWidth()) * 0.5f);
- tempRadarViewable->second.text_->setTop((-pos.y + 1.0f + tempRadarViewable->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);
}
- tempRadarViewable->second.panel_->show();
- tempRadarViewable->second.text_->show();
-// tempRadarViewable->second.text_->hide();
+ // Make sure the overlays are shown
+ it->second.panel_->show();
+ it->second.text_->show();
}
-
}
-}
-
-// float HUDNavigation::getDist2Focus() const {
-//
-// Radar* radar = this->getOwner()->getScene()->getRadar();
-// if (radar->getFocus() && HumanController::getLocalControllerEntityAsPawn())
-// return (radar->getFocus()->getRVWorldPosition() - HumanController::getLocalControllerEntityAsPawn()->getWorldPosition()).length();
-// else
-// return 0;
-// }
-
-/**
- at brief Overridden method of OrxonoxOverlay. 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;
-
- if (!activeObjectList_.empty())
+ /** Overridden method of OrxonoxOverlay.
+ @details
+ Usually the entire overlay scales with scale().
+ Here we obviously have to adjust this.
+ */
+ void HUDNavigation::sizeChanged()
{
- for (tempRadarViewable = activeObjectList_.begin(); tempRadarViewable!=activeObjectList_.end(); ++tempRadarViewable)
- {
+ // Use size to compensate for aspect ratio if enabled.
+ float xScale = this->getActualSize().x;
+ float yScale = this->getActualSize().y;
- if (tempRadarViewable->second.panel_)
- tempRadarViewable->second.panel_->setDimensions(navMarkerSize_ * xScale, navMarkerSize_ * yScale);
-// if (this->aimMarker_)
-// aimMarker_->setDimensions(aimMarkerSize_ * xScale, aimMarkerSize_ * yScale);
- if (tempRadarViewable->second.text_)
- tempRadarViewable->second.text_->setCharHeight(tempRadarViewable->second.text_->getCharHeight() * yScale);
+ 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 (object == NULL)
+ return;
-void HUDNavigation::addObject(RadarViewable* object)
-{
- if (object == dynamic_cast<RadarViewable*>(this->getOwner()))
- return;
+ // Don't display our own ship
+ if (object == dynamic_cast<RadarViewable*>(this->getOwner()))
+ return;
- assert(object);
+ // Object hasn't been added yet (we know that)
+ assert(this->activeObjectList_.find(object) == this->activeObjectList_.end());
- // Make sure the object hasn't been added yet
- 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 everything needed to display the object on the radar and add it to the map
- // create nav marker
- Ogre::PanelOverlayElement* panel = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
- .createOverlayElement("Panel", "HUDNavigation_navMarker_" + getUniqueNumberString()));
+ // Create arrow/marker
+ Ogre::PanelOverlayElement* panel = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
+ .createOverlayElement("Panel", "HUDNavigation_navMarker_" + getUniqueNumberString()));
+ panel->setMaterialName("Orxonox/NavArrows");
+ panel->setDimensions(navMarkerSize_ * xScale, navMarkerSize_ * yScale);
- panel->setMaterialName("Orxonox/NavArrows");
+ Ogre::TextAreaOverlayElement* text = static_cast<Ogre::TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton()
+ .createOverlayElement("TextArea", "HUDNavigation_navText_" + getUniqueNumberString()));
+ text->setFontName(this->fontName_);
+ text->setCharHeight(text->getCharHeight() * yScale);
- Ogre::TextAreaOverlayElement* text = static_cast<Ogre::TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton()
- .createOverlayElement("TextArea", "HUDNavigation_navText_" + getUniqueNumberString()));
-
-
- float xScale = this->getActualSize().x;
- float yScale = this->getActualSize().y;
+ ObjectInfo tempStruct = {panel, text, true};
+ activeObjectList_[object] = tempStruct;
- panel->setDimensions(navMarkerSize_ * xScale, navMarkerSize_ * yScale);
- text->setFontName(this->fontName_);
- text->setCharHeight(text->getCharHeight() * yScale);
+ this->background_->addChild(panel);
+ this->background_->addChild(text);
+ }
- objectStruct tempStruct = {panel, text, true};
- activeObjectList_[object] = tempStruct;
-
- this->background_->addChild(panel);
- this->background_->addChild(text);
-
-// background_->addChild(activeObjectList_[object].first);
-// background_->addChild(activeObjectList_[object].second);
-
-}
-
-void HUDNavigation::removeObject(RadarViewable* viewable)
-{
- activeObjectListType::iterator it = activeObjectList_.find(viewable);
-
- if (activeObjectList_.find(viewable) != activeObjectList_.end())
+ void HUDNavigation::removeObject(RadarViewable* viewable)
{
- // Remove overlays from Ogre
- this->background_->removeChild(it->second.panel_->getName());
- this->background_->removeChild(it->second.text_->getName());
- // correctly destroy the overlay elements
- Ogre::OverlayManager::getSingleton().destroyOverlayElement(it->second.panel_);
- Ogre::OverlayManager::getSingleton().destroyOverlayElement(it->second.text_);
+ ObjectMap::iterator it = activeObjectList_.find(viewable);
- activeObjectList_.erase(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);
+ }
+ else
+ COUT(2) << "Warning, HUDNavigation: Attempting to remove non-existent object" << std::endl;
}
-
-}
-void HUDNavigation::changedOwner()
-{
- respawnObjectSetType respawnObjectSet = this->getOwner()->getScene()->getRadar()->getRadarObjects();
- respawnObjectSetType::iterator respawnObjectSetIt_;
- for (respawnObjectSetIt_ = respawnObjectSet.begin(); respawnObjectSetIt_ != respawnObjectSet.end(); ++respawnObjectSetIt_)
+ void HUDNavigation::changedOwner()
{
- if (!(*respawnObjectSetIt_)->isHumanShip_)
- this->addObject(*respawnObjectSetIt_);
+ // TODO: Delete old objects?
+ 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);
+ }
}
-
}
-
-
-
-// void updateActiveObjectList(map activeObjectList_){}
-//
-// void HUDNavigation::objectChanged(RadarViewable* viewable){}
-//
-//
-// float HUDNavigation::getRadarSensitivity(){}
-// void HUDNavigation::radarTick(float dt){}
-
-
-}
-
-
Modified: code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.h
===================================================================
--- code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.h 2010-05-18 12:22:51 UTC (rev 6923)
+++ code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.h 2010-05-18 15:34:48 UTC (rev 6924)
@@ -29,108 +29,68 @@
#ifndef _HUDNavigation_H__
#define _HUDNavigation_H__
-#include <utility>
-#include <map>
#include "overlays/OverlaysPrereqs.h"
-#include "interfaces/RadarViewable.h"
-#include "interfaces/RadarListener.h"
+#include <map>
+#include <string>
+
#include "util/OgreForwardRefs.h"
#include "tools/interfaces/Tickable.h"
+#include "interfaces/RadarListener.h"
#include "overlays/OrxonoxOverlay.h"
-#include <vector>
-
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();
- virtual void XMLPort(Element& xmlElement, XMLPort::Mode mode);
- virtual void tick(float dt);
- virtual void addObject(RadarViewable* object);
+ virtual void XMLPort(Element& xmlElement, XMLPort::Mode mode);
+ virtual void tick(float dt);
- virtual void removeObject(RadarViewable* viewable);
- virtual void objectChanged(RadarViewable* viewable) {}
- inline float getRadarSensitivity() const {return 1.0f;}
- inline void radarTick(float dt) {}
- virtual void changedOwner();
+ 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) {}
-private:
+ inline float getRadarSensitivity() const
+ { return 1.0f; }
+ private:
+ struct ObjectInfo
+ {
+ Ogre::PanelOverlayElement* panel_;
+ Ogre::TextAreaOverlayElement* text_;
+ bool outOfView_;
+ bool wasOutOfView_;
+ };
+ // XMLPort accessors
+ void setNavMarkerSize(float size)
+ { navMarkerSize_ = size; this->sizeChanged(); }
+ float getNavMarkerSize() const
+ { return navMarkerSize_; }
- void sizeChanged();
- void angleChanged() { }
- void positionChanged() { }
+ void setTextSize(float size);
+ float getTextSize() const;
-// void updateActiveObjectList(map activeObjectList_);
+ void setFont(const std::string& font);
+ const std::string& getFont() const;
+ typedef std::map<RadarViewable*, ObjectInfo > ObjectMap;
+ ObjectMap activeObjectList_;
-
- // XMLPort accessors
- void setNavMarkerSize(float size) {
- navMarkerSize_ = size;
- this->sizeChanged();
- }
- float getNavMarkerSize() const {
- return navMarkerSize_;
- }
-
- /*
- void setAimMarkerSize(float size) { this->aimMarkerSize_ = size; this->sizeChanged(); }
- float getAimMarkerSize() const { return this->aimMarkerSize_; }
- */
-
- void setTextSize(float size);
- float getTextSize() const;
-
- void setFont(const std::string& font);
- const std::string& getFont() const;
-
- void updateMarker();
- void updateFocus();
-// float getDist2Focus() const;
- void getSingleton();
-
-
- void updateActiveObjectMap();
-
- Ogre::PanelOverlayElement* navMarker_; //!< the panel used to show the arrow and the target marker
- float navMarkerSize_; //!< One paramter size of the navigation marker
- /*
- Ogre::PanelOverlayElement* aimMarker_; //!< Panel used to show the aim Marker
- float aimMarkerSize_; //!< One paramter size of the aim marker
- */
- Ogre::TextAreaOverlayElement* navText_; //!< Text overlay to display the target distance
-
-
- struct objectStruct{
-
- Ogre::PanelOverlayElement* panel_;
- Ogre::TextAreaOverlayElement* text_;
- bool outOfView_;
- bool wasOutOfView_;
-
+ float navMarkerSize_;
+ std::string fontName_;
+ float textSize_;
};
-
- typedef std::map<RadarViewable*, objectStruct > activeObjectListType;
- activeObjectListType activeObjectList_;
- activeObjectListType::iterator tempRadarViewable;
-
- typedef std::set<RadarViewable*> respawnObjectSetType;
-
-
-
- std::string fontName_;
- float textSize_;
-
-};
-
}
#endif /* _HUDNavigation_H__ */
More information about the Orxonox-commit
mailing list