Index: code/trunk/src/orxonox/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/CMakeLists.txt	(revision 1209)
+++ code/trunk/src/orxonox/CMakeLists.txt	(revision 1214)
@@ -3,4 +3,5 @@
   Main.cc
   Orxonox.cc
+  console/InGameConsole.cc
 #  SpaceshipSteering.cc
   hud/HUD.cc
Index: code/trunk/src/orxonox/GraphicsEngine.cc
===================================================================
--- code/trunk/src/orxonox/GraphicsEngine.cc	(revision 1209)
+++ code/trunk/src/orxonox/GraphicsEngine.cc	(revision 1214)
@@ -40,9 +40,9 @@
 #include <OgreLogManager.h>
 #include <OgreTextureManager.h>
-#include <OgreRenderWindow.h>
-
+#include "core/InputManager.h"
 #include "core/CoreIncludes.h"
 #include "core/ConfigValueIncludes.h"
 #include "core/Debug.h"
+#include "core/TclBind.h"
 
 
@@ -90,4 +90,5 @@
   {
     COUT(4) << "*** GraphicsEngine: Destroying objects..." << std::endl;
+    Ogre::WindowEventUtilities::removeWindowEventListener(this->renderWindow_, this);
     if (this->root_)
       delete this->root_;
@@ -112,4 +113,6 @@
     SetConfigValue(ogreLogLevelNormal_  , 4).description("Corresponding orxonox debug level for ogre Normal");
     SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical");
+
+    TclBind::getInstance().setDataPath(this->dataPath_);
   }
 
@@ -184,4 +187,5 @@
   {
     this->renderWindow_ = root_->initialise(true, "OrxonoxV2");
+    Ogre::WindowEventUtilities::addWindowEventListener(this->renderWindow_, this);
     Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);
     //TODO: Do NOT load all the groups, why are we doing that? And do we really do that? initialise != load...
@@ -289,3 +293,21 @@
         << "*** Ogre: " << message << std::endl;
   }
+
+    void GraphicsEngine::windowMoved(Ogre::RenderWindow *rw){
+        int w = rw->getWidth();
+        int h = rw->getHeight();
+        InputManager::getSingleton().setWindowExtents(w, h);
+    }
+
+    void GraphicsEngine::windowResized(Ogre::RenderWindow *rw){
+        int w = rw->getWidth();
+        int h = rw->getHeight();
+        InputManager::getSingleton().setWindowExtents(w, h);
+    }
+
+    void GraphicsEngine::windowFocusChanged(Ogre::RenderWindow *rw){
+        int w = rw->getWidth();
+        int h = rw->getHeight();
+        InputManager::getSingleton().setWindowExtents(w, h);
+    }
 }
Index: code/trunk/src/orxonox/GraphicsEngine.h
===================================================================
--- code/trunk/src/orxonox/GraphicsEngine.h	(revision 1209)
+++ code/trunk/src/orxonox/GraphicsEngine.h	(revision 1214)
@@ -42,5 +42,6 @@
 #include <OgrePrerequisites.h>
 #include <OgreLog.h>
-
+#include <OgreRenderWindow.h>
+#include <OgreWindowEventUtilities.h>
 #include "core/OrxonoxClass.h"
 
@@ -48,52 +49,54 @@
 namespace orxonox {
 
-  /**
+    /**
     @brief Graphics engine manager class
-  */
-  class _OrxonoxExport GraphicsEngine : public OrxonoxClass, public Ogre::LogListener
-  {
-    friend class ClassIdentifier<GraphicsEngine>;
-    public:
-      void setConfigPath(std::string path) { this->configPath_ = path; };
-      void setConfigValues();
-      void setup();
-      bool load(std::string path);
-      void loadRessourceLocations(std::string path);
-      Ogre::SceneManager* getSceneManager();
-      void initialise();
-      void destroy();
+    */
+    class _OrxonoxExport GraphicsEngine : public Ogre::WindowEventListener, public OrxonoxClass, public Ogre::LogListener
+    {
+        friend class ClassIdentifier<GraphicsEngine>;
+        public:
+            void setConfigPath(std::string path) { this->configPath_ = path; };
+            void setConfigValues();
+            void setup();
+            bool load(std::string path);
+            void loadRessourceLocations(std::string path);
+            Ogre::SceneManager* getSceneManager();
+            void initialise();
+            void destroy();
 
-      // several window properties
-      Ogre::RenderWindow* getRenderWindow() { return this->renderWindow_; }
-      size_t getWindowHandle();
-      int getWindowWidth() const;
-      int getWindowHeight() const;
+            // several window properties
+            Ogre::RenderWindow* getRenderWindow() { return this->renderWindow_; }
+            size_t getWindowHandle();
+            int getWindowWidth() const;
+            int getWindowHeight() const;
 
-      static GraphicsEngine& getSingleton();
-      static GraphicsEngine* getSingletonPtr() { return &getSingleton(); }
+            static GraphicsEngine& getSingleton();
+            static GraphicsEngine* getSingletonPtr() { return &getSingleton(); }
 
-    private:
-      // don't mess with singletons
-      GraphicsEngine();
-      ~GraphicsEngine();
-      GraphicsEngine(GraphicsEngine&) { }
+            void windowMoved(Ogre::RenderWindow* rw);
+            void windowResized(Ogre::RenderWindow* rw);
+            void windowFocusChanged(Ogre::RenderWindow* rw);
 
-      //! Method called by the LogListener from Ogre
-      void messageLogged(const std::string&, Ogre::LogMessageLevel,
-                         bool, const std::string&);
+        private:
+            // don't mess with singletons
+            GraphicsEngine();
+            ~GraphicsEngine();
+            GraphicsEngine(GraphicsEngine&) { }
 
-      Ogre::Root*         root_;        //!< Ogre's root
-      Ogre::SceneManager* scene_;       //!< scene manager of the game
-      Ogre::RenderWindow* renderWindow_;//!< the current render window
-      //bool               bOverwritePath_; //!< overwrites path
-      std::string         configPath_;  //!< path to config file
-      std::string         dataPath_;    //!< path to data file
-      std::string         ogreLogfile_; //!< log file name for Ogre log messages
-      int ogreLogLevelTrivial_;         //!< Corresponding Orxonx debug level for LL_TRIVIAL
-      int ogreLogLevelNormal_;          //!< Corresponding Orxonx debug level for LL_NORMAL
-      int ogreLogLevelCritical_;        //!< Corresponding Orxonx debug level for LL_CRITICAL
+            //! Method called by the LogListener from Ogre
+            void messageLogged(const std::string&, Ogre::LogMessageLevel,
+                             bool, const std::string&);
 
-  };
-
+            Ogre::Root*         root_;        //!< Ogre's root
+            Ogre::SceneManager* scene_;       //!< scene manager of the game
+            Ogre::RenderWindow* renderWindow_;//!< the current render window
+            //bool               bOverwritePath_; //!< overwrites path
+            std::string         configPath_;  //!< path to config file
+            std::string         dataPath_;    //!< path to data file
+            std::string         ogreLogfile_; //!< log file name for Ogre log messages
+            int ogreLogLevelTrivial_;         //!< Corresponding Orxonx debug level for LL_TRIVIAL
+            int ogreLogLevelNormal_;          //!< Corresponding Orxonx debug level for LL_NORMAL
+            int ogreLogLevelCritical_;        //!< Corresponding Orxonx debug level for LL_CRITICAL
+    };
 }
 
Index: code/trunk/src/orxonox/Main.cc
===================================================================
--- code/trunk/src/orxonox/Main.cc	(revision 1209)
+++ code/trunk/src/orxonox/Main.cc	(revision 1214)
@@ -74,5 +74,5 @@
 int main(int argc, char **argv)
 {
-  try {
+  //try {
     SignalHandler::getInstance()->doCatch(argv[0], "orxonox.log");
     Orxonox* orx = Orxonox::getSingleton();
@@ -86,5 +86,5 @@
     orx->start();
     orx->destroySingleton();
-  }
+  /*}
   catch (std::exception &ex)
   {
@@ -92,5 +92,5 @@
     std::cerr << ex.what() << "\n";
     return 1;
-  }
+  }*/
 
   return 0;
Index: code/trunk/src/orxonox/Orxonox.cc
===================================================================
--- code/trunk/src/orxonox/Orxonox.cc	(revision 1209)
+++ code/trunk/src/orxonox/Orxonox.cc	(revision 1214)
@@ -76,4 +76,5 @@
 #include "tools/Timer.h"
 #include "hud/HUD.h"
+#include "console/InGameConsole.h"
 
 // FIXME: is this really file scope?
@@ -128,5 +129,5 @@
   {
   public:
-    static void calculate(const std::string& calculation)
+    static float calculate(const std::string& calculation)
     {
       ExprParser expr(calculation);
@@ -140,7 +141,11 @@
           std::cout << "Warning: Expression could not be parsed to the end! Remains: '"
               << expr.getRemains() << "'" << std::endl;
+        return expr.getResult();
       }
       else
+      {
         std::cout << "Cannot calculate expression: Parse error" << std::endl;
+        return 0;
+      }
     }
   };
@@ -420,12 +425,21 @@
     InputBuffer* ib = new InputBuffer();
     InputManager::getSingleton().feedInputBuffer(ib);
+    /*
     Testconsole* console = new Testconsole(ib);
     ib->registerListener(console, &Testconsole::listen, true);
     ib->registerListener(console, &Testconsole::execute, '\r', false);
-    ib->registerListener(console, &Testconsole::execute, '\n', false);
     ib->registerListener(console, &Testconsole::hintandcomplete, '\t', true);
     ib->registerListener(console, &Testconsole::clear, '§', true);
     ib->registerListener(console, &Testconsole::removeLast, '\b', true);
     ib->registerListener(console, &Testconsole::exit, (char)0x1B, true);
+    */
+
+    orxonoxConsole_ = new InGameConsole(ib);
+    ib->registerListener(orxonoxConsole_, &InGameConsole::listen, true);
+    ib->registerListener(orxonoxConsole_, &InGameConsole::execute, '\r', false);
+    ib->registerListener(orxonoxConsole_, &InGameConsole::hintandcomplete, '\t', true);
+    ib->registerListener(orxonoxConsole_, &InGameConsole::clear, '§', true);
+    ib->registerListener(orxonoxConsole_, &InGameConsole::removeLast, '\b', true);
+    ib->registerListener(orxonoxConsole_, &InGameConsole::exit, (char)0x1B, true);
 
     // first check whether ogre root object has been created
@@ -477,4 +491,5 @@
       for (Iterator<Tickable> it = ObjectList<Tickable>::start(); it; ++it)
         it->tick((float)evt.timeSinceLastFrame * this->timefactor_);
+      orxonoxConsole_->tick((float)evt.timeSinceLastFrame * this->timefactor_);
 
       // don't forget to call _fireFrameStarted in ogre to make sure
Index: code/trunk/src/orxonox/Orxonox.h
===================================================================
--- code/trunk/src/orxonox/Orxonox.h	(revision 1209)
+++ code/trunk/src/orxonox/Orxonox.h	(revision 1214)
@@ -105,4 +105,5 @@
       // TODO: make this a config-value by creating a config class for orxonox
       float                 frameSmoothingTime_;
+      InGameConsole*        orxonoxConsole_;
       HUD*                  orxonoxHUD_;
       bool                  bAbort_;        //!< aborts the render loop if true
Index: code/trunk/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 1209)
+++ code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 1214)
@@ -96,4 +96,6 @@
   // hud
   class HUD;
+  //console
+  class InGameConsole;
 }
 
Index: code/trunk/src/orxonox/console/InGameConsole.cc
===================================================================
--- code/trunk/src/orxonox/console/InGameConsole.cc	(revision 1214)
+++ code/trunk/src/orxonox/console/InGameConsole.cc	(revision 1214)
@@ -0,0 +1,277 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Felix Schulthess
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+
+#include "InGameConsole.h"
+
+#include <string>
+#include <OgreOverlay.h>
+#include <OgreOverlayElement.h>
+#include <OgreOverlayManager.h>
+#include <OgreOverlayContainer.h>
+#include <OgreStringConverter.h>
+
+#include "core/Debug.h"
+#include "core/CoreIncludes.h"
+#include "core/ConsoleCommand.h"
+#include "GraphicsEngine.h"
+
+#define LINES 20
+
+namespace orxonox
+{
+    using namespace Ogre;
+
+    const float REL_WIDTH = 0.8;
+    const float REL_HEIGHT = 0.4;
+    const float BLINK = 0.25;
+
+    InGameConsole::InGameConsole(InputBuffer* ib){
+        //RegisterObject(InGameConsole);
+        ib_ = ib;
+        active = false;
+        cursor = 0.0;
+        init();
+    }
+
+    InGameConsole::~InGameConsole(void){
+        for(int i=0; i<LINES; i++) delete consoleOverlayTextAreas[i];
+        delete consoleOverlayTextAreas;
+    }
+
+    void InGameConsole::listen(){
+        if(!active) activate();
+        print(convert2UTF(this->ib_->get()));
+    }
+
+    void InGameConsole::execute(){
+        newline();
+        if (!CommandExecutor::execute(this->ib_->get())){
+            print("Error");
+            newline();
+        }
+        this->ib_->clear();
+    }
+
+    void InGameConsole::hintandcomplete(){
+        print(CommandExecutor::hint(this->ib_->get()));
+        newline();
+        this->ib_->set(CommandExecutor::complete(this->ib_->get()));
+        print(convert2UTF(this->ib_->get()));
+    }
+
+    void InGameConsole::clear(){
+        this->ib_->clear();
+    }
+
+    void InGameConsole::removeLast(){
+        this->ib_->removeLast();
+    }
+
+    void InGameConsole::exit(){
+        clear();
+        deactivate();
+        CommandExecutor::execute("setInputMode 2");
+    }
+
+    /**
+    @brief called once by constructor
+    */
+    void InGameConsole::init(){
+        // for the beginning, don't scroll
+        scroll = 0;
+        scrollTimer = 0;
+        cursor = 0;
+
+        // create overlay and elements
+        om = &Ogre::OverlayManager::getSingleton();
+
+        // create a container
+        consoleOverlayContainer = static_cast<OverlayContainer*>(om->createOverlayElement("Panel", "container"));
+        consoleOverlayContainer->setMetricsMode(Ogre::GMM_RELATIVE);
+        consoleOverlayContainer->setPosition((1-REL_WIDTH)/2, 0);
+        consoleOverlayContainer->setDimensions(REL_WIDTH, REL_HEIGHT);
+
+        // create BorderPanel
+        consoleOverlayBorder = static_cast<BorderPanelOverlayElement*>(om->createOverlayElement("BorderPanel", "borderPanel"));
+        consoleOverlayBorder->setMetricsMode(Ogre::GMM_PIXELS);
+        consoleOverlayBorder->setMaterialName("ConsoleCenter");
+        // set parameters for border
+        consoleOverlayBorder->setBorderSize(16, 16, 0, 16);
+        consoleOverlayBorder->setBorderMaterialName("ConsoleBorder");
+        consoleOverlayBorder->setLeftBorderUV(0.0, 0.49, 0.5, 0.51);
+        consoleOverlayBorder->setRightBorderUV(0.5, 0.49, 1.0, 0.5);
+        consoleOverlayBorder->setBottomBorderUV(0.49, 0.5, 0.51, 1.0);
+        consoleOverlayBorder->setBottomLeftBorderUV(0.0, 0.5, 0.5, 1.0);
+        consoleOverlayBorder->setBottomRightBorderUV(0.5, 0.5, 1.0, 1.0);
+
+        // create the text lines
+        consoleOverlayTextAreas = new TextAreaOverlayElement*[LINES];
+        for(int i = 0; i<LINES; i++){
+            consoleOverlayTextAreas[i] = static_cast<TextAreaOverlayElement*>(om->createOverlayElement("TextArea", "textArea"+Ogre::StringConverter::toString(i)));
+            consoleOverlayTextAreas[i]->setMetricsMode(Ogre::GMM_PIXELS);
+            consoleOverlayTextAreas[i]->setFontName("Console");
+            consoleOverlayTextAreas[i]->setCharHeight(20);
+            consoleOverlayTextAreas[i]->setParameter("colour_top", "0.21 0.69 0.21");
+            consoleOverlayTextAreas[i]->setLeft(8);
+            consoleOverlayTextAreas[i]->setCaption("");
+        }
+
+        // create noise
+        consoleOverlayNoise = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", "noise"));
+        consoleOverlayNoise->setMetricsMode(Ogre::GMM_PIXELS);
+        consoleOverlayNoise->setPosition(5,0);
+        consoleOverlayNoise->setMaterialName("ConsoleNoise");
+
+        consoleOverlay = om->create("Console");
+        consoleOverlay->add2D(consoleOverlayContainer);
+        consoleOverlayContainer->addChild(consoleOverlayBorder);
+//comment following line to disable noise
+        consoleOverlayContainer->addChild(consoleOverlayNoise);
+        for(int i = 0; i<LINES; i++) consoleOverlayContainer->addChild(consoleOverlayTextAreas[i]);
+        resize();
+
+        // move overlay "above" the top edge of the screen
+        // we take -1.2 because the border mkes the panel bigger
+        consoleOverlayContainer->setTop(-1.2*REL_HEIGHT);
+        // show overlay
+        consoleOverlay->show();
+
+        COUT(3) << "Info: InGameConsole initialized" << std::endl;
+    }
+
+    /**
+    @brief used to control the actual scrolling and cursor
+    */
+    void InGameConsole::tick(float dt){
+        scrollTimer += dt;
+        if(scrollTimer >= 0.01){
+            float top = consoleOverlayContainer->getTop();
+            scrollTimer = 0;
+            if(scroll!=0){
+                // scroll
+                top = top + 0.02*scroll;
+                consoleOverlayContainer->setTop(top);
+            }
+            if(top <= -1.2*REL_HEIGHT){
+                // window has completely scrolled up
+                scroll = 0;
+                consoleOverlay->hide();
+                active = false;
+            }
+            if(top >= 0){
+                // window has completely scrolled down
+                scroll = 0;
+                consoleOverlayContainer->setTop(0);
+                active = true;
+            }
+        }
+
+        cursor += dt;
+        if(cursor >= 2*BLINK) cursor = 0;
+        print(convert2UTF(this->ib_->get()));
+
+// this creates a flickering effect
+        consoleOverlayNoise->setTiling(1, rand()%5+1);
+    }
+
+    /**
+    @brief resizes the console elements. call if window size changes
+    */
+    void InGameConsole::resize(){
+        windowW = GraphicsEngine::getSingleton().getWindowWidth();
+        windowH = GraphicsEngine::getSingleton().getWindowHeight();
+        consoleOverlayBorder->setWidth((int) windowW*REL_WIDTH);
+        consoleOverlayBorder->setHeight((int) windowH*REL_HEIGHT);
+        consoleOverlayNoise->setWidth((int) windowW*REL_WIDTH - 10);
+        consoleOverlayNoise->setHeight((int) windowH*REL_HEIGHT - 5);
+        // now adjust the text lines...
+        for(int i = 0; i<LINES; i++){
+            consoleOverlayTextAreas[i]->setWidth(windowW*REL_WIDTH);
+            consoleOverlayTextAreas[i]->setTop((int)windowH*REL_HEIGHT - 24 - 16*i);
+        }
+    }
+
+    /**
+    @brief shows console
+    */
+    void InGameConsole::activate(){
+        consoleOverlay->show();
+        // just in case window size has changed...
+        resize();
+        // scroll down
+        scroll = 1;
+        // the rest is done by tick
+    }
+
+    /**
+    @brief hides console
+    */
+    void InGameConsole::deactivate(){
+        // scroll up
+        scroll = -1;
+        // the rest is done by tick
+    }
+
+    /**
+    @brief prints string to bottom line
+    @param s string to be printed
+    */
+    void InGameConsole::print(Ogre::UTFString s){
+        if(cursor>BLINK) consoleOverlayTextAreas[0]->setCaption(">" + s);
+        else consoleOverlayTextAreas[0]->setCaption(">" + s + "_");
+    }
+
+    /**
+    @brief shifts all lines up and clears the bottom line
+    */
+    void InGameConsole::newline(){
+        Ogre::UTFString line;
+        for(int i = LINES-1; i>=1; i--){
+            line = consoleOverlayTextAreas[i-1]->getCaption();
+            // don't copy the cursor...
+            int l = line.length();
+            if(!line.empty() && line.substr(l-1) == "_") line.erase(l-1);
+            consoleOverlayTextAreas[i]->setCaption(line);
+        }
+        consoleOverlayTextAreas[0]->setCaption(">");
+    }
+
+    Ogre::UTFString InGameConsole::convert2UTF(std::string s){
+        Ogre::UTFString utf;
+        int i;
+        Ogre::UTFString::code_point cp;
+        for (i=0; i<(int)s.size(); ++i){
+          cp = s[i];
+          cp &= 0xFF;
+          utf.append(1, cp);
+        }
+        return utf;
+    }
+}
Index: code/trunk/src/orxonox/console/InGameConsole.h
===================================================================
--- code/trunk/src/orxonox/console/InGameConsole.h	(revision 1214)
+++ code/trunk/src/orxonox/console/InGameConsole.h	(revision 1214)
@@ -0,0 +1,82 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Felix Schulthess
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _InGameConsole_H__
+#define _InGameConsole_H__
+
+
+#include "OrxonoxPrereqs.h"
+#include <OgrePrerequisites.h>
+#include <OgreBorderPanelOverlayElement.h>
+#include <OgreTextAreaOverlayElement.h>
+
+#include "core/Tickable.h"
+#include "core/InputBuffer.h"
+
+
+namespace orxonox
+{
+    class _OrxonoxExport InGameConsole : public InputBufferListener
+    {
+        public:
+            InGameConsole(InputBuffer* ib);
+            ~InGameConsole();
+            void listen();
+            void execute();
+            void hintandcomplete();
+            void clear();
+            void removeLast();
+            void exit();
+            void init();
+            void tick(float dt);
+            void activate();
+            void deactivate();
+
+        private:
+            void resize();
+            void print(Ogre::UTFString s);
+            void newline();
+            Ogre::UTFString convert2UTF(std::string s);
+
+            int windowW;
+            int windowH;
+            int scroll;
+            float scrollTimer;
+            float cursor;
+            bool active;
+            InputBuffer* ib_;
+            Ogre::OverlayManager* om;
+            Ogre::Overlay* consoleOverlay;
+            Ogre::OverlayContainer* consoleOverlayContainer;
+            Ogre::PanelOverlayElement* consoleOverlayNoise;
+            Ogre::BorderPanelOverlayElement* consoleOverlayBorder;
+            Ogre::TextAreaOverlayElement** consoleOverlayTextAreas;
+    };
+}
+
+#endif /* _InGameConsole_H__ */
