Index: /code/branches/presentation2/data/defaultConfig/keybindings.ini
===================================================================
--- /code/branches/presentation2/data/defaultConfig/keybindings.ini	(revision 6209)
+++ /code/branches/presentation2/data/defaultConfig/keybindings.ini	(revision 6210)
@@ -154,5 +154,5 @@
 Left="fire 0"
 Middle=
-Right="fire 1"
+Right= fire 1 | unfire
 Wheel1Down="NewHumanController decelerate"
 Wheel1Up="NewHumanController accelerate"
Index: /code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc	(revision 6209)
+++ /code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc	(revision 6210)
@@ -44,4 +44,7 @@
 #include "Scene.h"
 
+#include <cmath>
+
+
 namespace orxonox
 {
@@ -49,4 +52,5 @@
     SetConsoleCommand(NewHumanController, accelerate,          false).keybindMode(KeybindMode::OnPress);
     SetConsoleCommand(NewHumanController, decelerate,          false).keybindMode(KeybindMode::OnPress);
+    SetConsoleCommand(NewHumanController, unfire,              true).keybindMode(KeybindMode::OnRelease);
 
     CreateUnloadableFactory(NewHumanController);
@@ -62,6 +66,9 @@
 
         overlaySize_ = 0.08;
+        arrowsSize_ = 0.4;
         controlMode_ = 0;
         acceleration_ = 0;
+        firemode_ = -1;
+        showArrows_ = true;
 
         //currentPitch_ = 1;
@@ -74,4 +81,5 @@
             crossHairOverlay_->setSize(Vector2(overlaySize_, overlaySize_));
             crossHairOverlay_->hide();
+            //crossHairOverlay_->setAspectCorrection(true); not working
 
             centerOverlay_ = new OrxonoxOverlay(this);
@@ -80,4 +88,35 @@
             centerOverlay_->setPosition(Vector2(0.5 - overlaySize_*2.5/2.0, 0.5 - overlaySize_*2.5/2.0));\
             centerOverlay_->hide();
+
+            if (showArrows_)
+            {
+                arrowsOverlay1_ = new OrxonoxOverlay(this);
+                arrowsOverlay1_->setBackgroundMaterial("Orxonox/DirectionArrows1");
+                arrowsOverlay1_->setSize(Vector2(0.02727, 0.36 * arrowsSize_));
+                arrowsOverlay1_->setPickPoint(Vector2(0.5, 0.5));
+                arrowsOverlay1_->setPosition(Vector2(0.5, 0.5));
+                arrowsOverlay1_->hide();
+    
+                arrowsOverlay2_ = new OrxonoxOverlay(this);
+                arrowsOverlay2_->setBackgroundMaterial("Orxonox/DirectionArrows2");
+                arrowsOverlay2_->setSize(Vector2(0.02727, 0.59 * arrowsSize_));
+                arrowsOverlay2_->setPickPoint(Vector2(0.5, 0.5));
+                arrowsOverlay2_->setPosition(Vector2(0.5, 0.5));
+                arrowsOverlay2_->hide();
+    
+                arrowsOverlay3_ = new OrxonoxOverlay(this);
+                arrowsOverlay3_->setBackgroundMaterial("Orxonox/DirectionArrows3");
+                arrowsOverlay3_->setSize(Vector2(0.02727, 0.77 * arrowsSize_));
+                arrowsOverlay3_->setPickPoint(Vector2(0.5, 0.5));
+                arrowsOverlay3_->setPosition(Vector2(0.5, 0.5));
+                arrowsOverlay3_->hide();
+    
+                arrowsOverlay4_ = new OrxonoxOverlay(this);
+                arrowsOverlay4_->setBackgroundMaterial("Orxonox/DirectionArrows4");
+                arrowsOverlay4_->setSize(Vector2(0.02727, arrowsSize_));
+                arrowsOverlay4_->setPickPoint(Vector2(0.5, 0.5));
+                arrowsOverlay4_->setPosition(Vector2(0.5, 0.5));
+                arrowsOverlay4_->hide();
+            }
         }
 
@@ -89,4 +128,6 @@
         NewHumanController::localController_s = this;
 
+        controlPaused_ = true;
+
 //HumanController::localController_s->getControllableEntity()->getCamera()->setDrag(true);
     }
@@ -98,4 +139,18 @@
             if (this->crossHairOverlay_)
                 this->crossHairOverlay_->destroy();
+            if (this->centerOverlay_)
+                this->centerOverlay_->destroy();
+
+            if (showArrows_)
+            {
+                if (this->arrowsOverlay1_)
+                    this->arrowsOverlay1_->destroy();
+                if (this->arrowsOverlay2_)
+                    this->arrowsOverlay2_->destroy();
+                if (this->arrowsOverlay3_)
+                    this->arrowsOverlay3_->destroy();
+                if (this->arrowsOverlay4_)
+                    this->arrowsOverlay4_->destroy();
+            }
         }
     }
@@ -105,4 +160,5 @@
         if (GameMode::showsGraphics())
         {
+
             if( this->controllableEntity_ && !this->controllableEntity_->isInMouseLook() )
             {
@@ -110,4 +166,10 @@
                 if ( !controlPaused_ ) {
                     this->crossHairOverlay_->setPosition(Vector2(static_cast<float>(this->currentYaw_)/2*-1+.5-overlaySize_/2, static_cast<float>(this->currentPitch_)/2*-1+.5-overlaySize_/2));
+
+                    if ( this->controlMode_ == 0 || ( this->controlMode_ == 1 && this->firemode_ == 1 ) )
+                        alignArrows();
+                    else
+                        hideArrows();
+
                     this->crossHairOverlay_->show();
                     this->centerOverlay_->show();
@@ -117,4 +179,6 @@
                 this->crossHairOverlay_->hide();
                 this->centerOverlay_->hide();
+
+                hideArrows();
             }
 
@@ -171,4 +235,6 @@
 */
 
+        this->firemode_ = firemode;
+
         if (firemode == 1 && this->controlMode_ == 1)
         {
@@ -180,4 +246,17 @@
             HumanController::localController_s->getControllableEntity()->fire(firemode);
 
+    }
+
+    void NewHumanController::unfire()
+    {
+        if (NewHumanController::localController_s)
+            NewHumanController::localController_s->doUnfire();
+    }
+
+    void NewHumanController::doUnfire()
+    {
+        COUT(0) << "dounfire" << endl;
+        this->firemode_ = -1;
+        hideArrows();
     }
 
@@ -273,5 +352,5 @@
     {
 //         SUPER(NewHumanController, yaw, value);
-        if (this->controlMode_ == 0)
+        if (this->controlMode_ == 0 || ( this->controllableEntity_ && this->controllableEntity_->isInMouseLook() ) )
             HumanController::yaw(value);
 
@@ -282,5 +361,5 @@
     {
 //         SUPER(NewHumanController, pitch, value);
-        if (this->controlMode_ == 0)
+        if (this->controlMode_ == 0 || ( this->controllableEntity_ && this->controllableEntity_->isInMouseLook() ) )
             HumanController::pitch(value);
 
@@ -292,6 +371,6 @@
         if (NewHumanController::localController_s && NewHumanController::localController_s->controlMode_ == 0)
         {
-            if (NewHumanController::localController_s->controllableEntity_ && !NewHumanController::localController_s->controllableEntity_->isInMouseLook() )
                 NewHumanController::localController_s->controlMode_ = 1;
+                NewHumanController::localController_s->hideArrows();
         }
         else
@@ -304,4 +383,7 @@
         this->currentYaw_ = 0;
         this->currentPitch_ = 0;
+        if (this->getControllableEntity() && this->getControllableEntity()->getIdentifier()->getName() == "SpaceShip") {
+            this->doResumeControl();
+        }
     }
 
@@ -330,6 +412,47 @@
     void NewHumanController::doPauseControl() {
         this->controlPaused_ = true;
+
         this->crossHairOverlay_->hide();
         this->centerOverlay_->hide();
+
+        hideArrows();
+    }
+
+    void NewHumanController::alignArrows() {
+        if (showArrows_) {
+            hideArrows();
+    
+            float distance = sqrt(pow(static_cast<float>(this->currentYaw_)/2*-1,2) + pow(static_cast<float>(this->currentPitch_)/2*-1,2));
+    
+            if ( distance > 0.04 && distance <= 0.59 * arrowsSize_ / 2.0 ) {
+                this->arrowsOverlay1_->setRotation(Degree(-90 + -1.0 * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
+    
+                this->arrowsOverlay1_->show();
+            }
+            else if ( distance > 0.59 * arrowsSize_ / 2.0 && distance <= 0.77 * arrowsSize_ / 2.0 ) {
+                this->arrowsOverlay2_->setRotation(Degree(-90 + -1.0 * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
+    
+                this->arrowsOverlay2_->show();
+            }
+            else if ( distance > 0.77 * arrowsSize_ / 2.0 && distance <= arrowsSize_ / 2.0 ) {
+                this->arrowsOverlay3_->setRotation(Degree(-90 + -1.0 * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
+    
+                this->arrowsOverlay3_->show();
+            }
+            else if ( distance > arrowsSize_ / 2.0 ) {
+                this->arrowsOverlay4_->setRotation(Degree(-90 + -1.0 * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
+    
+                this->arrowsOverlay4_->show();
+            }
+        }
+    }
+
+    void NewHumanController::hideArrows() {
+        if (showArrows_) {
+            this->arrowsOverlay1_->hide();
+            this->arrowsOverlay2_->hide();
+            this->arrowsOverlay3_->hide();
+            this->arrowsOverlay4_->hide();
+        }
     }
 }
Index: /code/branches/presentation2/src/orxonox/controllers/NewHumanController.h
===================================================================
--- /code/branches/presentation2/src/orxonox/controllers/NewHumanController.h	(revision 6209)
+++ /code/branches/presentation2/src/orxonox/controllers/NewHumanController.h	(revision 6210)
@@ -56,4 +56,7 @@
             virtual void doFire(unsigned int firemode);
 
+            static void unfire();
+            virtual void doUnfire();
+
             static void changeMode();
 
@@ -64,4 +67,6 @@
         protected:
             void updateTarget();
+            void alignArrows();
+            void hideArrows();
 
             unsigned int                controlMode_;
@@ -72,7 +77,14 @@
             OrxonoxOverlay*             crossHairOverlay_;
             OrxonoxOverlay*             centerOverlay_;
+            OrxonoxOverlay*             arrowsOverlay1_;
+            OrxonoxOverlay*             arrowsOverlay2_;
+            OrxonoxOverlay*             arrowsOverlay3_;
+            OrxonoxOverlay*             arrowsOverlay4_;
             float                       overlaySize_;
+            float                       arrowsSize_;
             bool                        accelerating_;
             float                       acceleration_;
+            int                         firemode_;
+            bool                        showArrows_;
             ClassTreeMask               targetMask_;
     };
