Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 1406 for code


Ignore:
Timestamp:
May 24, 2008, 1:39:05 PM (16 years ago)
Author:
rgrieder
Message:
  • merged Felix's changes from trunk to network branch
  • added "svn:eol-style native" property to keybindings.ini
Location:
code/branches/network
Files:
15 edited
2 copied

Legend:

Unmodified
Added
Removed
  • code/branches/network/bin/keybindings.ini

    • Property svn:eol-style set to native
    r1397 r1406  
    11[KeyBinder]
    2 KeyUNASSIGNED=
     2KeyUNASSIGNED=activateConsole
    33KeyESCAPE=exit
    44Key1=
     
    1515KeyEQUALS=activateConsole
    1616KeyBACK=
    17 KeyTAB=
     17KeyTAB=cycleNavigationFocus
    1818KeyQ=moveRoll
    1919KeyW=moveLongitudinal
     
    147147KeyMEDIASELECT=
    148148MouseLeft=fire
    149 MouseRight=fire
    150 MouseMiddle=fire
    151 MouseButton3=fire
    152 MouseButton4=fire
    153 MouseButton5=fire
    154 MouseButton6=fire
    155 MouseButton7=fire
    156 MouseWheel1Up=scale 0.1 slomo
    157 MouseWheel1Down=scale 0.1 slomo
     149MouseRight=
     150MouseMiddle=
     151MouseButton3=
     152MouseButton4=
     153MouseButton5=
     154MouseButton6=
     155MouseButton7=
     156MouseWheel1Up=
     157MouseWheel1Down=
    158158MouseWheel2Up=
    159159MouseWheel2Down=
     
    214214JoyAxis24Pos=
    215215JoyAxis24Neg=
    216 JoyButton0=cycleFocus
     216JoyButton0=cycleNavigationFocus
    217217JoyButton1=
    218218JoyButton2=
  • code/branches/network/bin/levels/sample.oxw

    r1362 r1406  
    1010
    1111<!--Ambient colourvalue="1,1,1" /-->
    12 <Skybox src="Orxonox/StarSkyBox" />
     12<Skybox src="Orxonox/Starbox" />
    1313<SpaceShip camera="true" position="0,0,0" scale="10" yawpitchroll="0,0,0" mesh="assff.mesh" maxSpeed="500" maxSideAndBackSpeed="50" maxRotation="1.0" transAcc="200" rotAcc="3.0" transDamp="75" rotDamp="1.0" />
    14 <Model position="1500,0,100" scale="10" mesh="tomato.mesh" yawpitchroll="-40,30,0" rotationAxis="1,0,0" rotationRate="-30"/>
    15 <Model position="0,4200,0" scale="10" mesh="tomato.mesh" yawpitchroll="-50,60,0" rotationAxis="1,0,0" rotationRate="-30"/>
    16 <Model position="0,0,6800" scale="10" mesh="tomato.mesh" yawpitchroll="-50,-30,0" rotationAxis="1,0,0" rotationRate="-30"/>
     14<Model position="2000,0,0" scale="10" mesh="tomato.mesh" yawpitchroll="-40,30,0" rotationAxis="1,0,0" rotationRate="-30"/>
     15<Model position="0,2000,0" scale="10" mesh="tomato.mesh" yawpitchroll="-50,60,0" rotationAxis="1,0,0" rotationRate="-30"/>
     16<Model position="0,0,2000" scale="10" mesh="tomato.mesh" yawpitchroll="-50,-30,0" rotationAxis="1,0,0" rotationRate="-30"/>
    1717<NPC position="0,100,400" scale="1" mesh="razor.mesh"/>
    1818<NPC position="0,100,400" scale="1" mesh="razor.mesh"/>
  • code/branches/network/src/orxonox/CMakeLists.txt

    r1362 r1406  
    99  hud/RadarOverlayElement.cc
    1010  hud/RadarObject.cc
     11  hud/Navigation.cc
    1112  particle/ParticleInterface.cc
    1213  tolua/tolua_bind.cc
  • code/branches/network/src/orxonox/Orxonox.cc

    r1391 r1406  
    181181  {
    182182    // keep in mind: the order of deletion is very important!
    183     if (this->orxonoxHUD_)
    184       delete this->orxonoxHUD_;
     183//    if (this->orxonoxHUD_)
     184//      delete this->orxonoxHUD_;
    185185    Loader::close();
    186186    InputManager::destroy();
     
    350350    // Load the HUD
    351351    COUT(3) << "Orxonox: Loading HUD..." << std::endl;
    352     orxonoxHUD_ = new HUD(1);
     352    orxonoxHUD_ = &HUD::getSingleton();
    353353
    354354    COUT(3) << "Orxonox: Loading Console..." << std::endl;
     
    490490//      orxonoxHUD_->setRocket2(ogreRoot.getCurrentFrameNumber());
    491491      if (eventTimes[3].back() - eventTimes[3].front() != 0)
    492 //        orxonoxHUD_->setRocket1((int)(50000.0f/(eventTimes[3].back() - eventTimes[3].front())));
     492        HUD::setFPS(50000.0f/(eventTimes[3].back() - eventTimes[3].front()));
    493493
    494494      // Iterate through all Tickables and call their tick(dt) function
  • code/branches/network/src/orxonox/hud/BarOverlayElement.cc

    r1373 r1406  
    2828#include "OrxonoxStableHeaders.h"
    2929#include <OgreOverlayManager.h>
    30 #include <OgreOverlayElement.h>
    31 #include <OgrePanelOverlayElement.h>
    3230#include "GraphicsEngine.h"
    3331#include "BarOverlayElement.h"
     
    3735  using namespace Ogre;
    3836
    39     BarOverlayElement::BarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
     37    BarOverlayElement::BarOverlayElement(const String& name):PanelOverlayElement(name){
    4038        name_ = name;
    4139    }
     
    4341    BarOverlayElement::~BarOverlayElement(){}
    4442
    45     void BarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
     43    void BarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, OverlayContainer* container){
    4644        // init some values...
    4745        container_ = container;
    48         om = &Ogre::OverlayManager::getSingleton();
     46        om = &OverlayManager::getSingleton();
    4947        value_ = 0;
    5048        color_ = 2;
     
    5452        topRel_ = topRel;
    5553        dimRel_ = dimRel;
    56        
     54
    5755        // create background...
    5856        background_ = static_cast<OverlayContainer*>(om->createOverlayElement("Panel", name_+"container"));
    5957        background_->show();
    6058        container_->addChild(background_);
    61         background_->setMetricsMode(Ogre::GMM_PIXELS);
     59        background_->setMetricsMode(GMM_PIXELS);
    6260        background_->setMaterialName("Orxonox/BarBackground");
    6361
     
    6664
    6765        show();
    68         setMetricsMode(Ogre::GMM_PIXELS);
     66        setMetricsMode(GMM_PIXELS);
    6967        setMaterialName("Orxonox/Green");
    7068        background_->addChild(this);
  • code/branches/network/src/orxonox/hud/BarOverlayElement.h

    r1362 r1406  
    3030#define _BAR_H__
    3131
    32 #include <OgreOverlayManager.h>
    33 #include <OgreOverlayElement.h>
     32
    3433#include <OgrePanelOverlayElement.h>
    35 
    3634#include <OgrePrerequisites.h>
    3735#include "../OrxonoxPrereqs.h"
    38 
    39 
    4036
    4137namespace orxonox
  • code/branches/network/src/orxonox/hud/HUD.cc

    r1385 r1406  
    2626*/
    2727
    28 
     28#include <string.h>
    2929#include "OrxonoxStableHeaders.h"
    3030#include <OgreOverlay.h>
    3131#include <OgreOverlayContainer.h>
    3232#include <OgreOverlayManager.h>
    33 #include <OgreSceneNode.h>
    34 #include <OgreEntity.h>
    3533#include <OgreStringConverter.h>
     34
    3635#include "core/Debug.h"
     36#include "core/ConsoleCommand.h"
    3737#include "objects/SpaceShip.h"
    38 #include "HUD.h"
    3938#include "BarOverlayElement.h"
    4039#include "RadarOverlayElement.h"
    4140#include "OverlayElementFactories.h"
     41#include "HUD.h"
    4242
    4343namespace orxonox
    4444{
     45    ConsoleCommandShortcut(HUD, cycleNavigationFocus, AccessLevel::User);
     46
    4547    using namespace Ogre;
    4648
    47     HUD::HUD(int zoom){
     49    HUD::HUD(){
    4850        om = &Ogre::OverlayManager::getSingleton();
     51        firstRadarObject = NULL;
     52        lastRadarObject = NULL;
    4953
    5054                // create Factories
     
    5660        orxonoxHUD = om->create("Orxonox/HUD");
    5761        container = static_cast<Ogre::OverlayContainer*>(om->createOverlayElement("Panel", "Orxonox/HUD/container"));
    58         // test
    59         test = static_cast<TextAreaOverlayElement*>(om->createOverlayElement("TextArea", "test123"));
    60         test->show();
    61         test->setMetricsMode(Ogre::GMM_RELATIVE);
    62         test->setDimensions(0.8, 0.8);
    63         test->setPosition(0.02, 0.02);
    64         test->setFontName("Console");
    65         test->setCaption("init");
     62
     63        // creating text to display fps
     64        fpsText = static_cast<TextAreaOverlayElement*>(om->createOverlayElement("TextArea", "fpsText"));
     65        fpsText->show();
     66        fpsText->setMetricsMode(Ogre::GMM_PIXELS);
     67        fpsText->setDimensions(0.001, 0.001);
     68        fpsText->setPosition(10, 10);
     69        fpsText->setFontName("Console");
     70        fpsText->setCharHeight(20);
     71        fpsText->setCaption("init");
    6672
    6773        // create energy bar
     
    7581        radar->show();
    7682
     83        // create Navigation
     84        nav = new Navigation(container);
     85
    7786                // set up screen-wide container
    7887        container->show();
     
    8594        container->setHeight(1.0);
    8695        container->setMetricsMode(Ogre::GMM_RELATIVE);
    87         container->addChild(test);
     96        container->addChild(fpsText);
     97
    8898        energyBar->init(0.01, 0.94, 0.4, container);
    8999        energyBar->setValue(1);
     100
    90101        speedoBar->init(0.01, 0.90, 0.4, container);
     102
    91103        radar->init(0.5, 0.9, 0.2, container);
    92         radar->addObject(Vector3(1500.0, 0.0, 100.0));
    93         radar->addObject(Vector3(0.0, 4000.0, 0.0));
    94         radar->addObject(Vector3(0.0, 0.0, 6800.0));
    95         RadarOverlayElement::cycleFocus();
     104        addRadarObject(Vector3(2000.0, 0.0, 0.0));
     105        addRadarObject(Vector3(0.0, 2000.0, 0.0));
     106        addRadarObject(Vector3(0.0, 0.0, 2000.0));
     107    }
     108
     109    HUD::~HUD(){
     110        //todo: clean up objects
    96111    }
    97112
    98113    void HUD::tick(float dt)
    99114    {
    100         int d = radar->getDist2Focus()/10;
    101         if(d) test->setCaption("Distance: " + Ogre::StringConverter::toString(d));
    102         else test->setCaption("");
    103 
    104115        energyBar->resize();
    105116
     
    113124        radar->resize();
    114125        radar->update();
     126
     127        nav->update();
    115128    }
    116129
    117     HUD::~HUD(void){
     130    void HUD::addRadarObject(Vector3 pos){
     131        // check if this is the first RadarObject to create
     132        if(firstRadarObject == NULL){
     133            firstRadarObject = new RadarObject(container, pos);
     134            lastRadarObject = firstRadarObject;
     135        }
     136        else{ // if not, append to list
     137            lastRadarObject->next = new RadarObject(container, pos);
     138            lastRadarObject = lastRadarObject->next;
     139        }
     140    }
     141
     142    RadarObject* HUD::getFirstRadarObject(){
     143        return firstRadarObject;
     144    }
     145
     146    /*static*/HUD& HUD::getSingleton(){
     147        static HUD theInstance;
     148        return theInstance;
     149    }
     150
     151    /*static*/void HUD::setFPS(float fps){
     152        HUD::getSingleton().fpsText->setCaption("FPS: " + Ogre::StringConverter::toString(fps));
     153    }
     154
     155    /*static*/void HUD::setEnergy(float value){
     156        HUD::getSingleton().energyBar->setValue(value);
     157    }
     158
     159    /*static*/void HUD::cycleNavigationFocus(){
     160        HUD::getSingleton().nav->cycleFocus();
    118161    }
    119162}
  • code/branches/network/src/orxonox/hud/HUD.h

    r1362 r1406  
    3030#define _HUD_H__
    3131
    32 #include <string.h>
    33 #include <OgreOverlayElement.h>
     32#include <OgrePrerequisites.h>
    3433#include <OgreTextAreaOverlayElement.h>
    35 #include <OgrePrerequisites.h>
    36 
    3734#include "OrxonoxPrereqs.h"
    3835#include "core/Tickable.h"
    3936#include "BarOverlayElement.h"
    4037#include "RadarOverlayElement.h"
     38#include "Navigation.h"
     39#include "RadarObject.h"
    4140
    4241
     
    4645    {
    4746        private:
     47            HUD();
     48            HUD(HUD& instance);
     49            ~HUD();
    4850            Ogre::OverlayManager* om;
    4951            Ogre::Overlay* orxonoxHUD;
    5052            Ogre::OverlayContainer* container;
    51             Ogre::TextAreaOverlayElement* test;
     53            Ogre::TextAreaOverlayElement* fpsText;
    5254            BarOverlayElement* energyBar;
    5355            BarOverlayElement* speedoBar;
    5456            RadarOverlayElement* radar;
     57            RadarObject* firstRadarObject;
     58            RadarObject* lastRadarObject;
     59            Navigation* nav;
    5560
    5661        public:
    57             HUD(int zoom);
    58             ~HUD();
    5962            virtual void tick(float);
     63            void addRadarObject(Vector3 pos);
     64            RadarObject* getFirstRadarObject();
    6065
     66            static HUD* instance_s;
     67            static HUD& getSingleton();
     68            static void setFPS(float fps);
     69            static void setEnergy(float value);
     70            static void cycleNavigationFocus();
    6171    };
    6272}
  • code/branches/network/src/orxonox/hud/RadarObject.cc

    r1373 r1406  
    2929#include "RadarObject.h"
    3030
     31#include <string.h>
     32#include <OgreOverlayManager.h>
     33#include <OgrePanelOverlayElement.h>
     34#include <OgreStringConverter.h>
     35#include <util/Math.h>
     36
    3137namespace orxonox
    3238{
     
    3541        int RadarObject::count = 0;             // initialize static variable
    3642
    37         RadarObject::RadarObject(Ogre::OverlayContainer* container){
     43        RadarObject::RadarObject(OverlayContainer* container){
    3844                container_ = container;
    3945                pos_ = Vector3(0.0, 0.0, 0.0);
     
    4147        }
    4248
    43         RadarObject::RadarObject(Ogre::OverlayContainer* container, Vector3 pos){
     49        RadarObject::RadarObject(OverlayContainer* container, Vector3 pos){
    4450                container_ = container;
    4551                pos_ = pos;
     
    5157        void RadarObject::init(){
    5258            next = NULL;
    53                 om = &Ogre::OverlayManager::getSingleton();
     59                om = &OverlayManager::getSingleton();
    5460                panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel",
    55                         "Object"+Ogre::StringConverter::toString(count)));
     61                        "Object"+StringConverter::toString(count)));
    5662                panel_->setMaterialName("Orxonox/RedDot");
    5763                panel_->setDimensions(3,3);
     
    6369        }
    6470}
    65 
    66 /* my local clipboard...
    67 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    68 COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
    69 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    70 */
  • code/branches/network/src/orxonox/hud/RadarObject.h

    r1362 r1406  
    2828#ifndef _RADAR2_H__
    2929#define _RADAR2_H__
    30 
    31 #include <string.h>
    3230#include <OgrePrerequisites.h>
    33 #include <OgreOverlayManager.h>
    34 #include <OgreOverlayElement.h>
    35 #include <OgrePanelOverlayElement.h>
    36 #include <OgreStringConverter.h>
    37 
    38 #include <util/Math.h>
    3931#include "../OrxonoxPrereqs.h"
    4032
     
    5547            int index_;                             // index number of object
    5648                Vector3 pos_;                                                   // position in space
    57                         Ogre::Real radius_, phi_;                               // position on radar
    5849                        Ogre::OverlayContainer* container_;
    5950                        Ogre::PanelOverlayElement* panel_;              // the panel used to show the dot
  • code/branches/network/src/orxonox/hud/RadarOverlayElement.cc

    r1384 r1406  
    2222*      Yuning Chai
    2323*   Co-authors:
    24 *      ...
     24*      Felix Schulthess
    2525*
    2626*/
     
    2929#include "RadarOverlayElement.h"
    3030
     31#include <string.h>
     32#include <OgreOverlayManager.h>
     33#include <OgreStringConverter.h>
     34#include <OgrePanelOverlayElement.h>
     35
     36#include "GraphicsEngine.h"
     37#include "core/Tickable.h"
     38#include "core/ConsoleCommand.h"
     39#include "objects/SpaceShip.h"
     40#include "HUD.h"
     41
    3142namespace orxonox
    3243{
    33     ConsoleCommandShortcut(RadarOverlayElement, cycleFocus, AccessLevel::User);
    3444
    3545    using namespace Ogre;
    3646
    37     RadarOverlayElement* RadarOverlayElement::instance_s = NULL;
    38 
    39     RadarOverlayElement::RadarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
    40         RadarOverlayElement::instance_s = this;
     47    RadarOverlayElement::RadarOverlayElement(const String& name):PanelOverlayElement(name){
    4148    }
    4249
     
    4451    }
    4552
    46     void RadarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
     53    void RadarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, OverlayContainer* container){
    4754        // some initial data
    48                 om = &Ogre::OverlayManager::getSingleton();
     55                om = &OverlayManager::getSingleton();
    4956        dimRel_ = dimRel;
    5057        leftRel_ = leftRel;
    5158        topRel_ = topRel;
    5259        container_ = container;
    53         firstRadarObject_ = NULL;
    54         lastRadarObject_ = NULL;
    55         focus_ = NULL;
    5660
    57         // create nav marker ...
    58         navMarker_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", "NavMarker"));
    59         navMarker_->setMetricsMode(Ogre::GMM_PIXELS);
    60         navMarker_->setMaterialName("Orxonox/NavMarker");
    61         navMarker_->setDimensions(16,16);
    62         navMarker_->setPosition(0,386);
    63         navMarker_->hide();
    64         container_->addChild(navMarker_);
    65 
    66         // these have to fit the data in the level
    67         shipPos_ = Vector3(0.0, 0.0, 0.0);
    68         initialDir_ = Vector3(1.0, 0.0, 0.0);
    69         currentDir_ = initialDir_;
    70         initialOrth_ = Vector3(0.0, 0.0, 1.0);
    71         currentOrth_ = initialOrth_;
    72         plane = Plane(currentDir_, shipPos_);
    73 
    74         setMetricsMode(Ogre::GMM_PIXELS);
     61        setMetricsMode(GMM_PIXELS);
    7562        setMaterialName("Orxonox/Radar");
    7663        resize();
     
    9178
    9279    void RadarOverlayElement::update() {
     80<<<<<<< .working
    9381        shipPos_ = SpaceShip::getLocalShip()->getPosition();
    9482        currentDir_ = SpaceShip::getLocalShip()->getOrientation()*initialDir_;          // according to beni....
     
    9785
    9886        RadarObject* ro = firstRadarObject_;
     87=======
     88        shipPos_ = SpaceShip::getLocalShip()->getPosition();
     89        currentDir_ = SpaceShip::getLocalShip()->getDir();
     90                currentOrth_ = SpaceShip::getLocalShip()->getOrth();
     91        RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
     92>>>>>>> .merge-right.r1401
    9993        // iterate through all RadarObjects
    10094                while(ro != NULL){
    10195                    // calc position on radar...
    102             ro->radius_ = calcRadius(ro);
    103             ro->phi_ = calcPhi(ro);
    104             ro->right_ = calcRight(ro);
     96            float radius = calcRadius(shipPos_, currentDir_, currentOrth_, ro);
     97            float phi = calcPhi(shipPos_, currentDir_, currentOrth_, ro);
     98            bool right = calcRight(shipPos_, currentDir_, currentOrth_, ro);
    10599
    106100            // set size to fit distance...
     
    111105            else ro->panel_->setDimensions(1,1);
    112106
    113             if (ro->right_){
    114                 ro->panel_->setPosition(sin(ro->phi_)*ro->radius_/
    115                     3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
     107            if (right){
     108                ro->panel_->setPosition(sin(phi)*radius/
     109                    3.5*dim_/2+dim_/2+left_-2,-cos(phi)*radius/3.5*dim_/2+dim_/2+top_-2);
    116110            }
    117111            else {
    118                 ro->panel_->setPosition(-sin(ro->phi_)*ro->radius_/
    119                     3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
     112                ro->panel_->setPosition(-sin(phi)*radius/
     113                    3.5*dim_/2+dim_/2+left_-2,-cos(phi)*radius/3.5*dim_/2+dim_/2+top_-2);
    120114            }
    121115            ro = ro->next;
    122116                }
    123                 updateNavMarker();
    124117    }
    125 
    126     void RadarOverlayElement::updateNavMarker(){
    127         if(focus_ == NULL) return;
    128         // from the angle we find out where to draw the marker
    129         // and which of the four arrows to take
    130         float r1 = atan((float)(windowW_)/(float)(windowH_));
    131         float phi = focus_->phi_;
    132         if(focus_->right_){
    133             if(phi<r1){
    134                 navMarker_->setPosition(tan(phi)*windowH_/2+windowW_/2, 0);
    135                 navMarker_->setUV(0.5, 0.0, 1.0, 0.5);
    136             }
    137             else if(phi>3.14-r1){
    138                 navMarker_->setPosition(-tan(phi)*windowH_/2+windowW_/2, windowH_-16);
    139                 navMarker_->setUV(0.0, 0.5, 0.5, 1.0);
    140             }
    141             else {
    142                 navMarker_->setPosition(windowW_-16, -tan((3.14-2*phi)/2)*windowW_/2+windowH_/2);
    143                 navMarker_->setUV(0.5, 0.5, 1.0, 1.0);
    144             }
    145         }
    146         else{
    147             if(phi<r1) {
    148                 navMarker_->setPosition(-tan(phi)*windowH_/2+windowW_/2, 0);
    149                 navMarker_->setUV(0.5, 0.0, 1.0, 0.5);
    150             }
    151             else if(phi>3.14-r1) {
    152                 navMarker_->setPosition(tan(phi)*windowH_/2+windowW_/2, windowH_-16);
    153                 navMarker_->setUV(0.0, 0.5, 0.5, 1.0);
    154             }
    155             else {
    156                 navMarker_->setPosition(0, -tan((3.14-2*phi)/2)*windowW_/2+windowH_/2);
    157                 navMarker_->setUV(0.0, 0.0, 0.5, 0.5);
    158             }
    159         }
    160     }
    161 
    162     void RadarOverlayElement::addObject(Vector3 pos){
    163         if(firstRadarObject_ == NULL){
    164             firstRadarObject_ = new RadarObject(container_, pos);
    165             lastRadarObject_ = firstRadarObject_;
    166         }
    167         else{
    168             lastRadarObject_->next = new RadarObject(container_, pos);
    169             lastRadarObject_ = lastRadarObject_->next;
    170         }
    171         }
    172118
    173119        void RadarOverlayElement::listObjects(){
    174120            int i = 0;
    175             RadarObject* ro = firstRadarObject_;
     121            RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
    176122            COUT(3) << "List of RadarObjects:\n";
    177123            // iterate through all Radar Objects
     
    182128        }
    183129
    184         float RadarOverlayElement::getDist2Focus(){
    185             if(focus_ == NULL) return(0.0);
    186             return((focus_->pos_-shipPos_).length());
     130        float RadarOverlayElement::calcRadius(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj){
     131            return(acos((dir.dotProduct(obj->pos_ - pos))/
     132                        ((obj->pos_ - pos).length()*dir.length())));
    187133        }
    188134
    189         float RadarOverlayElement::calcRadius(RadarObject* obj){
    190             return(acos((currentDir_.dotProduct(obj->pos_ - shipPos_))/
    191                         ((obj->pos_ - shipPos_).length()*currentDir_.length())));
     135        float RadarOverlayElement::calcPhi(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj){
     136            // project difference vector on our plane...
     137            Vector3 proj = Plane(dir, pos).projectVector(obj->pos_ - pos);
     138            // ...and find out the angle
     139            return(acos((orth.dotProduct(proj))/
     140            (orth.length()*proj.length())));
    192141        }
    193142
    194         float RadarOverlayElement::calcPhi(RadarObject* obj){
    195             // project difference vector on our plane...
    196             Ogre::Vector3 proj = plane.projectVector(obj->pos_ - shipPos_);
    197             // ...and find out the angle
    198             return(acos((currentOrth_.dotProduct(proj))/
    199             (currentOrth_.length()*proj.length())));
    200         }
    201 
    202         bool RadarOverlayElement::calcRight(RadarObject* obj){
    203             if((currentDir_.crossProduct(currentOrth_)).dotProduct(obj->pos_ - shipPos_) > 0)
     143        bool RadarOverlayElement::calcRight(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj){
     144            if((dir.crossProduct(orth)).dotProduct(obj->pos_ - pos) > 0)
    204145                return true;
    205146        else return false;
    206147        }
    207 
    208         /*static*/void RadarOverlayElement::cycleFocus(){
    209             if(RadarOverlayElement::instance_s == NULL) return;
    210 
    211             if(RadarOverlayElement::instance_s->focus_ == NULL){
    212             RadarOverlayElement::instance_s->focus_ = RadarOverlayElement::instance_s->firstRadarObject_;
    213             }
    214         else{
    215             RadarOverlayElement::instance_s->focus_->panel_->setMaterialName("Orxonox/RedDot");
    216             RadarOverlayElement::instance_s->focus_ = RadarOverlayElement::instance_s->focus_->next;
    217         }
    218 
    219         if(RadarOverlayElement::instance_s->focus_ == NULL){
    220             RadarOverlayElement::instance_s->navMarker_->hide();
    221         }
    222         else{
    223             RadarOverlayElement::instance_s->navMarker_->show();
    224             RadarOverlayElement::instance_s->focus_->panel_->setMaterialName("Orxonox/WhiteDot");
    225         }
    226         }
    227148}
    228 
    229 /* my local clipboard...
    230 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    231 COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
    232 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    233 */
  • code/branches/network/src/orxonox/hud/RadarOverlayElement.h

    r1362 r1406  
    2929#define _RADAR_H__
    3030
    31 #include <string.h>
    32 #include <OgreOverlayManager.h>
    33 #include <OgreStringConverter.h>
    34 #include <OgreOverlayElement.h>
    35 #include <OgrePanelOverlayElement.h>
     31#include <util/Math.h>
    3632#include <OgrePrerequisites.h>
    37 
    38 #include <util/Math.h>
    39 #include <string.h>
    40 #include "core/Tickable.h"
    41 #include "core/ConsoleCommand.h"
    42 #include "objects/SpaceShip.h"
    4333#include "../OrxonoxPrereqs.h"
    4434#include "RadarObject.h"
    45 #include "GraphicsEngine.h"
    4635
    4736namespace orxonox
     
    5241            Ogre::OverlayManager* om;               // our one and only overlay manager
    5342            Ogre::OverlayContainer* container_;     // pointer to the container we're in
    54             Vector3 initialDir_;                        // direction of nose
    5543            Vector3 currentDir_;
    56             Vector3 initialOrth_;                   // direction of normal
    5744            Vector3 currentOrth_;
    5845            Vector3 shipPos_;                       // position of ship
    59             Ogre::Plane plane;                      // plane perpendicular to dir
    6046
    6147            Ogre::Real leftRel_, topRel_, dimRel_;  // relative position/dimension
     
    6955                        void resize();
    7056            void update();
    71             void updateNavMarker();
    72             void addObject(Vector3 pos);
    7357            void listObjects();
    74             float getDist2Focus();
    75             float calcRadius(RadarObject* obj);
    76             float calcPhi(RadarObject* obj);
    77             bool calcRight(RadarObject* obj);
    7858
    79             Ogre::PanelOverlayElement* navMarker_;  // marker to help navigating
    80                         RadarObject* firstRadarObject_;         // start of linked list
    81                         RadarObject* lastRadarObject_;          // end of linked list
    82                         RadarObject* focus_;                    // object that is focussed
    83 
    84             static RadarOverlayElement* instance_s;
    85             static void cycleFocus();
     59            static float calcRadius(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj);
     60            static float calcPhi(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj);
     61            static bool calcRight(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj);
    8662        };
    8763}
  • code/branches/network/src/orxonox/objects/Camera.h

    r1293 r1406  
    5050        void setTargetNode(Ogre::SceneNode* obj);
    5151
     52        Ogre::Camera* cam_;
     53
    5254        void tick(float dt);
    5355        void update();
     
    6365        Ogre::SceneNode* cameraNode_;
    6466        Ogre::Vector3 oldPos;
    65         Ogre::Camera* cam_;
    6667        bool bHasFocus_;
    6768    };
  • code/branches/network/src/orxonox/objects/SpaceShip.cc

    r1398 r1406  
    7575      return NULL;
    7676    }
    77    
     77
    7878    SpaceShip::SpaceShip() :
    7979      //testvector_(0,0,0),
     
    118118        this->setConfigValues();
    119119
     120        initialDir_ = Vector3(1.0, 0.0, 0.0);
     121        currentDir_ = initialDir_;
     122        initialOrth_ = Vector3(0.0, 0.0, 1.0);
     123        currentOrth_ = initialOrth_;
    120124
    121125        this->setRotationAxis(1, 0, 0);
     
    233237        CameraHandler::getInstance()->requestFocus(cam_);
    234238
     239    }
     240
     241    Camera* SpaceShip::getCamera(){
     242        return cam_;
    235243    }
    236244
     
    318326    }
    319327
     328    Vector3 SpaceShip::getDir() {
     329        return currentDir_;
     330    }
     331
     332    Vector3 SpaceShip::getOrth(){
     333        return currentOrth_;
     334    }
     335
    320336    float SpaceShip::getMaxSpeed() { return maxSpeed_; }
    321337
    322338    void SpaceShip::tick(float dt)
    323339    {
     340        currentDir_ = getOrientation()*initialDir_;
     341                currentOrth_ = getOrientation()*initialOrth_;
     342
    324343        if (this->cam_)
    325344            this->cam_->tick(dt);
     
    341360        if (this->bLMousePressed_ && this->timeToReload_ <= 0)
    342361        {
    343          
     362
    344363            Projectile *p = new Projectile(this);
    345            
     364
    346365            p->setBacksync(true);
    347366            this->timeToReload_ = this->reloadTime_;
  • code/branches/network/src/orxonox/objects/SpaceShip.h

    r1398 r1406  
    4444    {
    4545        public:
    46          
     46
    4747            static SpaceShip *getLocalShip();
    48            
     48
    4949            SpaceShip();
    5050            ~SpaceShip();
     
    6464            void setTransDamp(float value);
    6565            void setRotDamp(float value);
     66            void getFocus();
    6667
    67             void getFocus();
    68             static Vector3 getSPosition();
    69             static Quaternion getSOrientation();
    7068            static std::string whereAmI();
    7169            static void setMaxSpeedTest(float value)
     
    8078
    8179            float getMaxSpeed();
     80            Vector3 getDir();
     81            Vector3 getOrth();
     82            Camera* getCamera();
    8283
    8384        private:
     
    8586
    8687            Vector3 testvector_;
     88            Vector3 initialDir_;
     89            Vector3 currentDir_;
     90            Vector3 initialOrth_;
     91            Vector3 currentOrth_;
    8792            bool bInvertYAxis_;
    8893            bool setMouseEventCallback_;
Note: See TracChangeset for help on using the changeset viewer.