[Orxonox-commit 2149] r6865 - code/branches/hudelements/src/modules/overlays/hud
sfluecki at orxonox.net
sfluecki at orxonox.net
Mon May 10 11:02:13 CEST 2010
Author: sfluecki
Date: 2010-05-10 11:02:12 +0200 (Mon, 10 May 2010)
New Revision: 6865
Modified:
code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.cc
code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.h
Log:
tick funktion angepasst
Modified: code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.cc
===================================================================
--- code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.cc 2010-05-09 08:56:43 UTC (rev 6864)
+++ code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.cc 2010-05-10 09:02:12 UTC (rev 6865)
@@ -27,6 +27,7 @@
*/
#include "HUDNavigation.h"
+#include <utility>
#include <string>
#include <OgreCamera.h>
@@ -53,16 +54,16 @@
: OrxonoxOverlay(creator)
{
RegisterObject(HUDNavigation);
+
+// // 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 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()
@@ -75,13 +76,13 @@
setNavMarkerSize(0.05f);
setAimMarkerSize(0.04f);
*/
-
- background_->addChild(navMarker_);
+/*
+ background_->addChild(navMarker_);*/
// background_->addChild(aimMarker_);
- background_->addChild(navText_);
+// background_->addChild(navText_);
// hide at first
- this->setVisible(false);
+// this->setVisible(false);
}
@@ -137,31 +138,42 @@
void HUDNavigation::tick(float dt)
{
SUPER(HUDNavigation, tick, dt);
+
+// updateActiveObjectList(activeObjectList_);
// Get radar
- Radar* radar = this->getOwner()->getScene()->getRadar();
+// Radar* radar = this->getOwner()->getScene()->getRadar();
+//
+// if (!radar->getFocus())
+// {
+// this->overlay_->hide();
+// return;
+// }
+// else
+// {
+// this->overlay_->show();
+// }
- 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;
+// 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;
- orxonox::Camera* cam = CameraManager::getInstance().getActiveCamera();
+ if(!activeObjectList_.empty()) {
+ for(tempRadarViewable = activeObjectList_.begin(); tempRadarViewable!=activeObjectList_.end(); ++tempRadarViewable)
+ {
+
+ //get Distance to HumanController and save it in the TextAreaOverlayElement.
+ int dist = (int)(tempRadarViewable->first->getRVWorldPosition() - HumanController::getLocalControllerEntityAsPawn()->getWorldPosition()).length();
+ tempRadarViewable->second.second->setCaption(multi_cast<std::string>(dist));
+ float textLength = multi_cast<std::string>(dist).size() * tempRadarViewable->second.second->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 * radar->getFocus()->getRVWorldPosition();
+ Vector3 pos = transform * tempRadarViewable->first->getRVWorldPosition();
bool outOfView;
if (pos.z > 1.0)
@@ -183,7 +195,7 @@
if (!wasOutOfView_)
{
- navMarker_->setMaterialName("Orxonox/NavArrows");
+ tempRadarViewable->second.first->setMaterialName("Orxonox/NavArrows");
wasOutOfView_ = true;
}
@@ -193,19 +205,19 @@
{
// up
float position = pos.x / pos.y + 1.0f;
- navMarker_->setPosition((position - navMarker_->getWidth()) * 0.5f, 0.0f);
- navMarker_->setUV(0.5f, 0.0f, 1.0f, 0.5f);
- navText_->setLeft((position - textLength) * 0.5f);
- navText_->setTop(navMarker_->getHeight());
+ tempRadarViewable->second.first->setPosition((position - tempRadarViewable->second.first->getWidth()) * 0.5f, 0.0f);
+ tempRadarViewable->second.first->setUV(0.5f, 0.0f, 1.0f, 0.5f);
+ tempRadarViewable->second.second->setLeft((position - textLength) * 0.5f);
+ tempRadarViewable->second.second->setTop(tempRadarViewable->second.first->getHeight());
}
else
{
// left
float position = pos.y / pos.x + 1.0f;
- navMarker_->setPosition(0.0f, (position - navMarker_->getWidth()) * 0.5f);
- navMarker_->setUV(0.0f, 0.0f, 0.5f, 0.5f);
- navText_->setLeft(navMarker_->getWidth() + 0.01f);
- navText_->setTop((position - navText_->getCharHeight()) * 0.5f);
+ tempRadarViewable->second.first->setPosition(0.0f, (position - tempRadarViewable->second.first->getWidth()) * 0.5f);
+ tempRadarViewable->second.first->setUV(0.0f, 0.0f, 0.5f, 0.5f);
+ tempRadarViewable->second.second->setLeft(tempRadarViewable->second.first->getWidth() + 0.01f);
+ tempRadarViewable->second.second->setTop((position - tempRadarViewable->second.second->getCharHeight()) * 0.5f);
}
}
else
@@ -214,24 +226,26 @@
{
// down
float position = -pos.x / pos.y + 1.0f;
- navMarker_->setPosition((position - navMarker_->getWidth()) * 0.5f, 1.0f - navMarker_->getHeight());
- navMarker_->setUV(0.0f, 0.5f, 0.5f, 1.0f);
- navText_->setLeft((position - textLength) * 0.5f);
- navText_->setTop(1.0f - navMarker_->getHeight() - navText_->getCharHeight());
+ tempRadarViewable->second.first->setPosition((position - tempRadarViewable->second.first->getWidth()) * 0.5f, 1.0f - navMarker_->getHeight());
+ tempRadarViewable->second.first->setUV(0.0f, 0.5f, 0.5f, 1.0f);
+ tempRadarViewable->second.second->setLeft((position - textLength) * 0.5f);
+ tempRadarViewable->second.second->setTop(1.0f - tempRadarViewable->second.first->getHeight() - tempRadarViewable->second.second->getCharHeight());
}
else
{
// right
float position = -pos.y / pos.x + 1.0f;
- navMarker_->setPosition(1.0f - navMarker_->getWidth(), (position - navMarker_->getHeight()) * 0.5f);
- navMarker_->setUV(0.5f, 0.5f, 1.0f, 1.0f);
- navText_->setLeft(1.0f - navMarker_->getWidth() - textLength - 0.01f);
- navText_->setTop((position - navText_->getCharHeight()) * 0.5f);
+ tempRadarViewable->second.first->setPosition(1.0f - tempRadarViewable->second.first->getWidth(), (position - tempRadarViewable->second.first->getHeight()) * 0.5f);
+ tempRadarViewable->second.first->setUV(0.5f, 0.5f, 1.0f, 1.0f);
+ tempRadarViewable->second.second->setLeft(1.0f - tempRadarViewable->second.first->getWidth() - textLength - 0.01f);
+ tempRadarViewable->second.second->setTop((position - tempRadarViewable->second.second->getCharHeight()) * 0.5f);
}
}
}
else
{
+
+
// object is in view
/*
Vector3 aimpos = transform * getPredictedPosition(SpaceShip::getLocalShip()->getPosition(),
@@ -239,27 +253,30 @@
*/
if (wasOutOfView_)
{
- navMarker_->setMaterialName("Orxonox/NavTDC");
+ tempRadarViewable->second.first->setMaterialName("Orxonox/NavTDC");
wasOutOfView_ = false;
}
// object is in view
- navMarker_->setUV(0.0f, 0.0f, 1.0f, 1.0f);
- navMarker_->setLeft((pos.x + 1.0f - navMarker_->getWidth()) * 0.5f);
- navMarker_->setTop((-pos.y + 1.0f - navMarker_->getHeight()) * 0.5f);
+ tempRadarViewable->second.first->setUV(0.0f, 0.0f, 1.0f, 1.0f);
+ tempRadarViewable->second.first->setLeft((pos.x + 1.0f - tempRadarViewable->second.first->getWidth()) * 0.5f);
+ tempRadarViewable->second.first->setTop((-pos.y + 1.0f - tempRadarViewable->second.first->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);
*/
- navText_->setLeft((pos.x + 1.0f + navMarker_->getWidth()) * 0.5f);
- navText_->setTop((-pos.y + 1.0f + navMarker_->getHeight()) * 0.5f);
+ tempRadarViewable->second.second->setLeft((pos.x + 1.0f + tempRadarViewable->second.first->getWidth()) * 0.5f);
+ tempRadarViewable->second.second->setTop((-pos.y + 1.0f + tempRadarViewable->second.first->getHeight()) * 0.5f);
}
+ }
}
-
- float HUDNavigation::getDist2Focus() const
- {
+ }
+
+
+ float HUDNavigation::getDist2Focus() const{
+
Radar* radar = this->getOwner()->getScene()->getRadar();
if (radar->getFocus() && HumanController::getLocalControllerEntityAsPawn())
return (radar->getFocus()->getRVWorldPosition() - HumanController::getLocalControllerEntityAsPawn()->getWorldPosition()).length();
@@ -271,26 +288,23 @@
@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.
+ void HUDNavigation::sizeChanged(){
+ // use size to compensate for aspect ratio if enabled.
float xScale = this->getActualSize().x;
float yScale = this->getActualSize().y;
if (this->navMarker_)
navMarker_->setDimensions(navMarkerSize_ * xScale, navMarkerSize_ * yScale);
-/*
- if (this->aimMarker_)
- aimMarker_->setDimensions(aimMarkerSize_ * xScale, aimMarkerSize_ * yScale);
-*/
+// if (this->aimMarker_)
+// aimMarker_->setDimensions(aimMarkerSize_ * xScale, aimMarkerSize_ * yScale);
if (this->navText_)
navText_->setCharHeight(navText_->getCharHeight() * yScale);
}
- void HUDNavigation::addObject(RadarViewable* object)
- {
- if (object == dynamic_cast<RadarViewable*>(this->getOwner()))
+
+ void HUDNavigation::addObject(RadarViewable* object){
+ if (object == dynamic_cast<RadarViewable*>(this->getOwner()))
return;
-
+
assert(object);
// Make sure the object hasn't been added yet
@@ -306,21 +320,31 @@
Ogre::TextAreaOverlayElement* text = static_cast<Ogre::TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton()
.createOverlayElement("TextArea", "HUDNavigation_navText_" + getUniqueNumberString()));
+
+ int dist = (int)(object->getRVWorldPosition() - HumanController::getLocalControllerEntityAsPawn()->getWorldPosition()).length();
+ activeObjectList_[object].second->setCaption(multi_cast<std::string>(dist));
activeObjectList_[object] = std::make_pair (panel, text) ;
activeObjectList_[object].first->show();
activeObjectList_[object].second->show();
- }
+// background_->addChild(activeObjectList_[object].first);
+// background_->addChild(activeObjectList_[object].second);
+ }
- void HUDNavigation::removeObject(RadarViewable* viewable){
- assert(activeObjectList_.find(viewable)!=activeObjectList_.end());
+ void HUDNavigation::removeObject(RadarViewable* viewable){
+ assert(activeObjectList_.find(viewable)!=activeObjectList_.end());
activeObjectList_.erase(viewable);
- }
+ }
+
+// void updateActiveObjectList(map activeObjectList_){}
+//
+// void HUDNavigation::objectChanged(RadarViewable* viewable){}
+//
//
-// 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-09 08:56:43 UTC (rev 6864)
+++ code/branches/hudelements/src/modules/overlays/hud/HUDNavigation.h 2010-05-10 09:02:12 UTC (rev 6865)
@@ -38,7 +38,6 @@
#include "tools/interfaces/Tickable.h"
#include "overlays/OrxonoxOverlay.h"
-#include <pair>
#include <vector>
namespace orxonox
@@ -64,7 +63,9 @@
void angleChanged() { }
void positionChanged() { }
+// void updateActiveObjectList(map activeObjectList_);
+
// XMLPort accessors
void setNavMarkerSize(float size) { this->navMarkerSize_ = size; this->sizeChanged(); }
@@ -85,7 +86,7 @@
void updateFocus();
float getDist2Focus() const;
void getSingleton();
- void getSingleton();
+
void updateActiveObjectMap();
@@ -98,7 +99,9 @@
Ogre::TextAreaOverlayElement* navText_; //!< Text overlay to display the target distance
bool wasOutOfView_; //!< Performance booster variable: setMaterial is not cheap
- std::map<RadarViewable*, std::pair<Ogre::PanelOverlayElement*, Ogre::TextAreaOverlayElement*> > activeObjectList_;
+ typedef std::map<RadarViewable*, std::pair<Ogre::PanelOverlayElement*, Ogre::TextAreaOverlayElement*> > activeObjectListType;
+ activeObjectListType activeObjectList_;
+ activeObjectListType::iterator tempRadarViewable;
};
More information about the Orxonox-commit
mailing list