Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 1609


Ignore:
Timestamp:
Jun 17, 2008, 11:38:23 PM (17 years ago)
Author:
rgrieder
Message:

svn save, just in case…
(doesn't compile at all!)

Location:
code/branches/hud
Files:
6 added
1 deleted
12 edited

Legend:

Unmodified
Added
Removed
  • code/branches/hud/src/orxonox/CMakeLists.txt

    r1604 r1609  
    33  Main.cc
    44  Orxonox.cc
     5  Radar.cc
    56  Settings.cc
    67
     
    1819  overlays/hud/HUDText.cc
    1920  overlays/hud/RadarObject.cc
     21  overlays/hud/RadarViewable.cc
    2022
    2123  tolua/tolua_bind.cc
  • code/branches/hud/src/orxonox/OrxonoxPrereqs.h

    r1601 r1609  
    7676  class Orxonox;
    7777
     78  class RadarViewable;
     79  class Radar;
     80  class RadarListener;
     81
    7882  // objects
    7983  class Ambient;
  • code/branches/hud/src/orxonox/objects/WorldEntity.h

    r1588 r1609  
    7373            inline const Vector3& getPosition() const
    7474                { return this->node_->getPosition(); }
     75            inline const Vector3& getWorldPosition() const
     76                { return this->node_->getWorldPosition(); }
    7577
    7678            inline void translate(const Vector3 &d, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
     
    100102            inline const Ogre::Quaternion& getOrientation()
    101103              { return this->node_->getOrientation(); }
     104            inline const Ogre::Quaternion& getWorldOrientation()
     105              { return this->node_->getWorldOrientation(); }
    102106            inline void setOrientation(const Ogre::Quaternion& quat)
    103107              { this->node_->setOrientation(quat); }
  • code/branches/hud/src/orxonox/overlays/OverlayGroup.cc

    r1604 r1609  
    7070    BaseObject::XMLPort(xmlElement, mode);
    7171
     72    XMLPortParam(OverlayGroup, "scale", scale, getScale, xmlElement, mode);
    7273    XMLPortObject(OverlayGroup, OrxonoxOverlay, "", addElement, getElement, xmlElement, mode, false, true);
    73     XMLPortParam(OverlayGroup, "scale", scale, getScale, xmlElement, mode);
    7474  }
    7575
  • code/branches/hud/src/orxonox/overlays/hud/HUDBar.cc

    r1604 r1609  
    7979            // create background
    8080            this->background_ = static_cast<PanelOverlayElement*>(
    81                     OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "_Background"));
     81                    OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "_Background_" + getUniqueNumberStr()));
    8282            this->background_->setMaterialName("Orxonox/BarBackground");
    8383            this->overlay_->add2D(this->background_);
     
    9393
    9494            // create bar
    95             this->bar_ = static_cast<PanelOverlayElement*>(OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "Bar"));
     95            this->bar_ = static_cast<PanelOverlayElement*>(OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "Bar" + getUniqueNumberStr()));
    9696            this->bar_->setMaterialName(materialname);
    9797            this->background_->addChild(bar_);
  • code/branches/hud/src/orxonox/overlays/hud/HUDRadar.cc

    r1604 r1609  
    3232#include <assert.h>
    3333#include <OgreOverlayManager.h>
     34#include <OgreMaterialManager.h>
    3435
    3536#include "core/ConsoleCommand.h"
    36 #include "util/Math.h"
    3737#include "objects/SpaceShip.h"
    3838#include "objects/WorldEntity.h"
    39 #include "RadarObject.h"
     39#include "RadarViewable.h"
    4040
    4141namespace orxonox
    4242{
    4343    CreateFactory(HUDRadar);
     44    CreateFactory(RadarColour);
     45    CreateFactory(RadarShape);
    4446
    4547    HUDRadar* HUDRadar::instance_s = 0;
     
    6264            if (this->background_)
    6365                OverlayManager::getSingleton().destroyOverlayElement(this->background_);
     66            while (this->radarDots_.size() > 0)
     67            {
     68                OverlayManager::getSingleton().destroyOverlayElement(this->radarDots_[this->radarDots_.size() - 1]);
     69                this->radarDots_.pop_back();
     70            }
    6471        }
    6572
     
    7077    {
    7178        OrxonoxOverlay::XMLPort(xmlElement, mode);
     79
     80        XMLPortObject(HUDRadar, RadarColour, "shapes", addShape, getShape, xmlElement, mode, false, true);
    7281
    7382        if (mode == XMLPort::LoadObject)
     
    7786            overlay_->add2D(background_);
    7887
    79             WorldEntity* object;
     88            // create an array of all possible materials
     89            unsigned int iMaterial = 0;
     90            for (std::map<unsigned int, RadarShape*>::const_iterator itShape = shapes_.begin(); itShape != shapes_.end(); ++itShape)
     91            {
     92                Ogre::MaterialPtr originalMaterial = (Ogre::MaterialPtr)(Ogre::MaterialManager::getSingleton().getByName((*itShape).second->getAttribute()));
     93                for (std::map<unsigned int, RadarColour*>::const_iterator itColour = colours_.begin(); itColour != colours_.end(); ++itColour)
     94                {
     95                    Ogre::MaterialPtr newMaterial = originalMaterial->clone((*itShape).second->getAttribute() + convertToString(iMaterial++));
     96                    newMaterial->getTechnique(0)->getPass(0)->setAmbient((*itColour).second->getAttribute());
     97                    materialNames_[(*itShape).first + ((*itColour).first << 8)] = newMaterial->getName();
     98                }
     99            }
     100
     101            /*WorldEntity* object;
    80102            object = new WorldEntity();
    81103            object->setPosition(2000.0, 0.0, 0.0);
     
    89111            object = new WorldEntity();
    90112            object->setPosition(10000.0,16000.0,0.0);
    91             addRadarObject(object);
    92         }
    93 
     113            addRadarObject(object);*/
     114        }
     115    }
     116
     117    void HUDRadar::addColour(RadarColour* colour)
     118    {
     119        this->colours_[colour->getIndex()] = colour;
     120    }
     121
     122    RadarColour* HUDRadar::getColour(unsigned int index) const
     123    {
     124        if (index < this->colours_.size())
     125        {
     126            std::map<unsigned int, RadarColour*>::const_iterator it = colours_.begin();
     127            for (unsigned int i = 0; i != index; ++it, ++i)
     128                ;
     129            return (*it).second;
     130        }
     131        else
     132            return 0;
     133    }
     134
     135    void HUDRadar::addShape(RadarShape* shape)
     136    {
     137        this->shapes_[shape->getIndex()] = shape;
     138    }
     139
     140    RadarShape* HUDRadar::getShape(unsigned int index) const
     141    {
     142        if (index < this->shapes_.size())
     143        {
     144            std::map<unsigned int, RadarShape*>::const_iterator it = shapes_.begin();
     145            for (unsigned int i = 0; i != index; ++it, ++i)
     146                ;
     147            return (*it).second;
     148        }
     149        else
     150            return 0;
    94151    }
    95152
     
    97154    {
    98155        // iterate through all RadarObjects
    99         for(std::list<RadarObject*>::iterator it = getRadarObjects().begin(); it!= getRadarObjects().end(); it++)
    100         {
    101             // calc position on radar...
    102             // set size to fit distance...
    103             float size = 1.0/(((*it)->getPosition() - SpaceShip::getLocalShip()->getPosition()).length());
    104             size = clamp(size * 100.0f, 0.02f, 0.12f);
    105             (*it)->getPanel()->setDimensions(size, size);
    106 
    107             Vector2 coord = get2DViewcoordinates(SpaceShip::getLocalShip()->getPosition(), SpaceShip::getLocalShip()->getDir(), SpaceShip::getLocalShip()->getOrth(), (*it)->getPosition());
    108             coord *= Ogre::Math::PI / 3.5; // small adjustment to make it fit the texture
    109             (*it)->getPanel()->setPosition((1.0 + coord.x) * 0.5, (1.0 - coord.y) * 0.5);
     156        unsigned int i = 0;
     157        for (Iterator<RadarViewable> it = ObjectList<RadarViewable>::start(); it; ++it, ++i)
     158        {
     159            if ((*it)->isVisibleOnRadar())
     160            {
     161                WorldEntity* object = (*it)->getWorldEntity();
     162                // Just to be sure that we actually have a WorldEntity
     163                // We could do a dynamic_cast, but that's a lot slower
     164                assert(object);
     165
     166                // set size to fit distance...
     167                float size = 1.0/((object->getWorldPosition() - SpaceShip::getLocalShip()->getPosition()).length());
     168                size = clamp(size * 100.0f, 0.02f, 0.12f);
     169                if (i == radarDots_.size())
     170                {
     171                    // we have to create a new panel
     172                    radarDots_.push_back(static_cast<Ogre::PanelOverlayElement*>(
     173                        Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "RadarDot" + convertToString(i))));
     174                }
     175                radarDots_[i]->setDimensions(size, size);
     176
     177                // calc position on radar...
     178                Vector2 coord = get2DViewcoordinates(SpaceShip::getLocalShip()->getPosition(), SpaceShip::getLocalShip()->getDir(), SpaceShip::getLocalShip()->getOrth(), object->getWorldPosition());
     179                coord *= Ogre::Math::PI / 3.5; // small adjustment to make it fit the texture
     180                radarDots_[i]->setPosition((1.0 + coord.x) * 0.5, (1.0 - coord.y) * 0.5);
     181
     182                // apply the right material
     183                RadarPoint description = (*it)->getDescription();
     184                radarDots_[i]->setMaterialName(materialNames_[description.shape_ + (description.colour_ << 8)]);
     185            }
    110186        }
    111187    }
     
    113189    void HUDRadar::listObjects()
    114190    {
    115         int i = 0;
    116191        COUT(3) << "List of RadarObjects:\n";
    117192        // iterate through all Radar Objects
    118         for(std::list<RadarObject*>::const_iterator it = getRadarObjects().begin(); it != getRadarObjects().end(); ++it)
    119         {
    120             COUT(3) << i++ << ": " << (*it)->getPosition() << std::endl;
    121         }
    122     }
    123 
    124     void HUDRadar::addRadarObject(WorldEntity* object, const ColourValue& colour)
    125     {
    126         RadarObject* obj = new RadarObject(overlay_, object, colour);
    127         roSet_.insert(roSet_.end(), obj);
    128     }
    129 
    130     void HUDRadar::removeRadarObject(WorldEntity* object)
    131     {
    132         for(std::list<RadarObject*>::iterator it=roSet_.begin(); it!=roSet_.end(); ++it)
    133         {
    134             if ((*it)->getObject() == object)
    135             {
    136                 /*if (this->nav_ && this->nav_->getFocus() == (*it))
    137                     this->nav_->releaseFocus();*/
    138 
    139                 delete (*it);
    140                 roSet_.erase(it);
    141                 return;
    142             }
     193        unsigned int i = 0;
     194        for (Iterator<RadarViewable> it = ObjectList<RadarViewable>::start(); it; ++it, ++i)
     195        {
     196            COUT(3) << i++ << ": " << (*it)->getWorldEntity()->getWorldPosition() << std::endl;
    143197        }
    144198    }
  • code/branches/hud/src/orxonox/overlays/hud/HUDRadar.h

    r1604 r1609  
    3636#include "overlays/OrxonoxOverlay.h"
    3737#include "objects/Tickable.h"
     38#include "core/BaseObject.h"
     39#include "util/Math.h"
     40#include "core/Debug.h"
     41#include "Radar.h"
    3842
    3943namespace orxonox
    4044{
    41     class _OrxonoxExport HUDRadar : public OrxonoxOverlay, public Tickable
     45    template <class T, int Dummy>
     46    class _OrxonoxExport RadarAttribute : public BaseObject
     47    {
     48      public:
     49        RadarAttribute();
     50        ~RadarAttribute() { }
     51
     52        void XMLPort(Element& xmlElement, XMLPort::Mode mode);
     53        void loadAttribute(Element& xmlElement, XMLPort::Mode mode);
     54
     55        void setAttribute(const T& attribute) { this->attribute_ = attribute; }
     56        const T& getAttribute() const { return this->attribute_; }
     57
     58        void setIndex(unsigned int index);
     59        unsigned int getIndex() { return this->index_; }
     60
     61      private:
     62        unsigned int index_;
     63        T attribute_;
     64    };
     65
     66    template <class T, int Dummy>
     67    void RadarAttribute<T, Dummy>::setIndex(unsigned int index)
     68    {
     69        if (index > 0xFF)
     70        {
     71            COUT(1) << "Shape index was larger than 255 while parsing a RadarAttribute. "
     72              << "Using random number!!!" << std::endl;
     73            this->index_ = rand() & 0xFF;
     74        }
     75        else
     76            this->index_ = index;
     77    }
     78
     79    typedef RadarAttribute<std::string, 1> RadarShape;
     80
     81    template <>
     82    RadarShape::RadarAttribute() : index_(0)
     83        { RegisterObject(RadarShape); }
     84
     85    template <>
     86    void RadarShape::XMLPort(Element& xmlElement, XMLPort::Mode mode)
     87    {
     88        BaseObject::XMLPort(xmlElement, mode);
     89        XMLPortParam(RadarShape, "shape", setAttribute, getAttribute, xmlElement, mode);
     90        XMLPortParam(RadarShape, "index", setIndex, getIndex, xmlElement, mode);
     91    }
     92
     93
     94    class _OrxonoxExport HUDRadar : public OrxonoxOverlay, public Tickable, public RadarListener
    4295    {
    4396      public:
     
    47100        void XMLPort(Element& xmlElement, XMLPort::Mode mode);
    48101
     102        void addShape(RadarShape* shape);
     103        RadarShape* getShape(unsigned int index) const;
     104
    49105        void tick(float dt);
    50106
    51107        void listObjects();
    52108
    53         inline std::list<RadarObject*>& getRadarObjects()
    54             { return this->roSet_; }
     109      private:
     110        void addColour(RadarColour* colour);
     111        RadarColour* getColour(unsigned int index) const;
    55112
    56         void addRadarObject(WorldEntity* object, const ColourValue& colour = ColourValue(0.5, 0.5, 0.5, 1));
    57         void removeRadarObject(WorldEntity* object);
     113        std::map<unsigned int, std::string> materialNames_;
     114        std::map<unsigned int, RadarColour*> colours_;
     115        std::map<unsigned int, RadarShape*> shapes_;
    58116
    59         static HUDRadar& getInstance();
    60 
    61       private:
    62         HUDRadar(HUDRadar& instance);
    63 
    64         std::list<RadarObject*> roSet_;
    65117        Ogre::PanelOverlayElement* background_;
    66 
    67         static HUDRadar* instance_s;
     118        std::map<RadarViewable*, Ogre::PanelOverlayElement*> radarDots_;
    68119    };
    69120}
  • code/branches/hud/src/util/Math.cc

    r1566 r1609  
    3030
    3131#include "Math.h"
     32#include "Convert.h"
    3233
    3334/**
     
    123124    return (targetposition + targetvelocity * time);
    124125}
     126
     127unsigned long getUniqueNumber()
     128{
     129    static unsigned long aNumber = 135;
     130    return aNumber++;
     131}
     132
     133std::string getUniqueNumberStr()
     134{
     135    return convertToString(getUniqueNumber());
     136}
  • code/branches/hud/src/util/Math.h

    r1588 r1609  
    3333
    3434#include <ostream>
     35#include <string>
    3536
    3637#include <OgreMath.h>
     
    163164}
    164165
     166_UtilExport unsigned long getUniqueNumber();
     167_UtilExport std::string getUniqueNumberStr();
     168
    165169class _UtilExport IntVector2
    166170{
  • code/branches/hud/src/util/UtilPrereqs.h

    r1505 r1609  
    6161//-----------------------------------------------------------------------
    6262class ArgReader;
    63 class Convert;
    6463class MultiTypePrimitive;
    6564class MultiTypeString;
  • code/branches/hud/visual_studio/vc8/orxonox.vcproj

    r1604 r1609  
    185185                        </File>
    186186                        <File
     187                                RelativePath="..\..\src\orxonox\Radar.cc"
     188                                >
     189                        </File>
     190                        <File
    187191                                RelativePath="..\..\src\orxonox\Settings.cc"
    188192                                >
     
    393397                                <File
    394398                                        RelativePath="..\..\src\orxonox\tools\ParticleInterface.cc"
     399                                        >
     400                                </File>
     401                                <File
     402                                        RelativePath="..\..\src\orxonox\tools\TextureGenerator.cc"
    395403                                        >
    396404                                </File>
     
    480488                                        <File
    481489                                                RelativePath="..\..\src\orxonox\overlays\hud\RadarObject.cc"
     490                                                >
     491                                        </File>
     492                                        <File
     493                                                RelativePath="..\..\src\orxonox\overlays\hud\RadarViewable.cc"
    482494                                                >
    483495                                        </File>
     
    507519                        </File>
    508520                        <File
     521                                RelativePath="..\..\src\orxonox\Radar.h"
     522                                >
     523                        </File>
     524                        <File
    509525                                RelativePath="..\..\src\orxonox\Settings.h"
    510526                                >
     
    622638                                </File>
    623639                                <File
     640                                        RelativePath="..\..\src\orxonox\tools\TextureGenerator.h"
     641                                        >
     642                                </File>
     643                                <File
    624644                                        RelativePath="..\..\src\orxonox\tools\Timer.h"
    625645                                        >
     
    686706                                        <File
    687707                                                RelativePath="..\..\src\orxonox\overlays\hud\RadarObject.h"
     708                                                >
     709                                        </File>
     710                                        <File
     711                                                RelativePath="..\..\src\orxonox\overlays\hud\RadarViewable.h"
    688712                                                >
    689713                                        </File>
Note: See TracChangeset for help on using the changeset viewer.