Index: code/branches/input/bin/resources.cfg
===================================================================
--- code/branches/input/bin/resources.cfg	(revision 943)
+++ 	(revision )
@@ -1,25 +1,0 @@
-# Resource locations to be added to the 'boostrap' path
-# This also contains the minimum you need to use the Ogre example framework
-[Bootstrap]
-Zip=../Media/packs/OgreCore.zip
-
-# Resource locations to be added to the default path
-[General]
-FileSystem=../Media
-FileSystem=../Media/fonts
-#FileSystem=../Media/materials/programs
-FileSystem=../Media/materials/scripts
-FileSystem=../Media/materials/textures
-FileSystem=../Media/models
-FileSystem=../Media/overlay
-FileSystem=../Media/particle
-FileSystem=../Media/gui
-#FileSystem=../Media/levels
-#FileSystem=../Media/audio
-Zip=../Media/packs/cubemap.zip
-#Zip=../Media/packs/cubemapsJS.zip
-#Zip=../Media/packs/dragon.zip
-#Zip=../Media/packs/fresneldemo.zip
-#Zip=../Media/packs/ogretestmap.zip
-Zip=../Media/packs/skybox.zip
-
Index: code/branches/input/src/CMakeLists.txt
===================================================================
--- code/branches/input/src/CMakeLists.txt	(revision 943)
+++ code/branches/input/src/CMakeLists.txt	(revision 944)
@@ -6,4 +6,3 @@
 ADD_SUBDIRECTORY(audio)
 ADD_SUBDIRECTORY(network)
-#ADD_SUBDIRECTORY(loader)
 ADD_SUBDIRECTORY(orxonox)
Index: code/branches/input/src/asylum/audio/_AudioObject.cc
===================================================================
--- code/branches/input/src/asylum/audio/_AudioObject.cc	(revision 944)
+++ code/branches/input/src/asylum/audio/_AudioObject.cc	(revision 944)
@@ -0,0 +1,142 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   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:
+*      ...
+*   Co-authors:
+*      ...
+*
+*/
+
+
+#include <iostream>
+#include <string>
+
+#include "core/Debug.h"
+#include "AudioObject.h"
+
+namespace audio
+{
+  AudioObject::AudioObject(std::string audioFile)
+  {
+    audioFile_ = audioFile;
+    SourcePos[0]=0;
+    SourcePos[1]=0;
+    SourcePos[2]=0;
+
+    SourceVel[0]=0;
+    SourceVel[1]=0;
+    SourceVel[2]=0;
+
+    ListenerPos[0]=0;
+    ListenerPos[1]=0;
+    ListenerPos[2]=0;
+
+    ListenerVel[0]=0;
+    ListenerVel[1]=0;
+    ListenerVel[2]=0;
+
+    ListenerOri[0]=0;
+    ListenerOri[1]=0;
+    ListenerOri[2]=-1;
+    ListenerOri[3]=0;
+    ListenerOri[4]=1;
+    ListenerOri[5]=0;
+
+
+    // Initialize OpenAL and clear the error bit.
+
+    alutInit(NULL, 0);
+    alGetError();
+
+    // Load the wav data.
+
+    if(LoadALData() == AL_FALSE)
+    {
+      printf("Error loading sound data.");
+
+    }
+
+    SetListenerValues();
+    COUT(3) << "Info: Play sone ambient background sound";
+  }
+
+  AudioObject::~AudioObject()
+  {
+    KillALData();
+  }
+
+  ALboolean AudioObject::LoadALData()
+  {
+    ALenum format;
+    ALsizei size;
+    ALvoid* data;
+    ALsizei freq;
+    ALboolean loop;
+
+
+    alGenBuffers(1, &Buffer);
+
+    if(alGetError() != AL_NO_ERROR)
+      return AL_FALSE;
+
+    alutLoadWAVFile((ALbyte*)audioFile_.c_str(), &format, &data, &size, &freq, &loop);
+    alBufferData(Buffer, format, data, size, freq);
+    alutUnloadWAV(format, data, size, freq);
+
+    alGenSources(1, &Source);
+
+    if(alGetError() != AL_NO_ERROR)
+      return AL_FALSE;
+
+    alSourcei (Source, AL_BUFFER,   Buffer   );
+    alSourcef (Source, AL_PITCH,    1.0      );
+    alSourcef (Source, AL_GAIN,     1.0      );
+    alSourcefv(Source, AL_POSITION, SourcePos);
+    alSourcefv(Source, AL_VELOCITY, SourceVel);
+    alSourcei (Source, AL_LOOPING,  loop     );
+
+    if(alGetError() == AL_NO_ERROR)
+      return AL_TRUE;
+
+
+    return AL_FALSE;
+  }
+
+  void AudioObject::SetListenerValues()
+  {
+    alListenerfv(AL_POSITION,    ListenerPos);
+    alListenerfv(AL_VELOCITY,    ListenerVel);
+    alListenerfv(AL_ORIENTATION, ListenerOri);
+  }
+
+  void AudioObject::KillALData()
+  {
+    alDeleteBuffers(1, &Buffer);
+    alDeleteSources(1, &Source);
+    alutExit();
+  }
+
+  void AudioObject::play()
+  {
+    alSourcePlay(Source);
+  }
+
+}
Index: code/branches/input/src/asylum/loader/CMakeLists.txt
===================================================================
--- code/branches/input/src/asylum/loader/CMakeLists.txt	(revision 944)
+++ code/branches/input/src/asylum/loader/CMakeLists.txt	(revision 944)
@@ -0,0 +1,15 @@
+SET( LOADER_SRC_FILES
+  LevelLoader.cc
+)
+
+IF (WIN32)
+  ADD_LIBRARY( loader ${LOADER_SRC_FILES} )
+ELSE (WIN32)
+  ADD_LIBRARY( loader SHARED ${LOADER_SRC_FILES})
+ENDIF (WIN32)
+
+SET_TARGET_PROPERTIES( loader PROPERTIES LINK_FLAGS "--no-undefined" )
+
+TARGET_LINK_LIBRARIES( loader
+  util
+)
Index: code/branches/input/src/asylum/loader/LevelLoader.cc
===================================================================
--- code/branches/input/src/asylum/loader/LevelLoader.cc	(revision 944)
+++ code/branches/input/src/asylum/loader/LevelLoader.cc	(revision 944)
@@ -0,0 +1,213 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   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:
+*     Nicolas Perrenoud <nicolape@ee.ethz.ch>
+*   Co-authors:
+*      ...
+*
+*/
+
+#include "OrxonoxStableHeaders.h"
+
+#include <OgreOverlay.h>
+#include <OgreOverlayManager.h>
+
+#include "core/Error.h"
+#include "core/Debug.h"
+#include "core/CoreIncludes.h"
+
+#include "audio/AudioManager.h"
+#include "core/BaseObject.h"
+#include "orxonox/Orxonox.h"
+
+#include "LevelLoader.h"
+
+namespace loader
+{
+
+  LevelLoader::LevelLoader(std::string file, std::string path)
+  {
+    valid_ = false;
+
+    // Load XML level file
+    path.append("/");
+    path.append(file);
+
+    // Open xml file
+    doc_.LoadFile(path.c_str());
+
+    // Check if file was loaded
+    if (doc_.LoadFile())
+    {
+      TiXmlHandle hDoc(&doc_);
+      TiXmlHandle hRoot(0);
+      TiXmlElement* pElem;
+
+      // Check for root element
+      pElem = hDoc.FirstChildElement("orxonoxworld").Element();
+      if (pElem)
+      {
+        // Set root element
+        hRoot = TiXmlHandle(pElem);
+        rootElement_ = hRoot.Element();
+
+        // Set level description
+        pElem = hRoot.FirstChild("description").Element();
+        if (pElem)
+        {
+          description_ = pElem->GetText();
+        }
+
+        // Set level name
+        name_ = rootElement_->Attribute("name");
+        image_ = rootElement_->Attribute("image");
+
+        valid_ = true;
+      }
+      else
+      {
+        orxonox::Error("Level file has no valid root node");
+      }
+    }
+    else
+    {
+      orxonox::Error("Could not load level file ");
+    }
+  }
+
+  void LevelLoader::loadLevel()
+  {
+    if (valid_)
+    {
+      TiXmlElement* loadElem;
+      TiXmlElement* audioElem;
+      TiXmlElement* worldElem;
+      TiXmlElement* tElem;
+      TiXmlNode* tNode;
+
+      Ogre::OverlayManager& omgr = Ogre::OverlayManager::getSingleton();
+      Ogre::Overlay* mLoadOverlay; // FIXME: may be uninitialized
+
+      // Set loading screen
+      loadElem = rootElement_->FirstChildElement("loading");
+      if (loadElem)
+      {
+        // Set background
+        tElem = loadElem->FirstChildElement("background");
+        if (tElem)
+        {
+          loadingBackgroundColor_ = tElem->Attribute("color");
+          loadingBackgroundImage_ = tElem->Attribute("image");
+        }
+        // Set bar
+        tElem = loadElem->FirstChildElement("bar");
+        if (tElem)
+        {
+          loadingBarImage_ = tElem->Attribute("image");;
+          loadingBarTop_ = tElem->Attribute("top");
+          loadingBarLeft_ = tElem->Attribute("left");
+          loadingBarWidth_ = tElem->Attribute("width");
+          loadingBarHeight_ = tElem->Attribute("height");
+        }
+
+
+        mLoadOverlay = (Ogre::Overlay*)omgr.getByName("Orxonox/LoadingScreenSample");
+        mLoadOverlay->show();
+
+        COUT(0) << "This is Orxonox" << std::endl;
+        COUT(0) << "the hottest 3D action shooter ever to exist" << std::endl;
+        COUT(0) << "Level: " << name() << std::endl << "Description:" << description() << std::endl << "Image:" << image() << std::endl;
+        COUT(4) << "Backgroundcolor: " << loadingBackgroundColor_ << std::endl << "Backgroundimage:" << loadingBackgroundImage_ << std::endl;
+
+      }
+
+      // Load audio
+      audio::AudioManager* auMan = orxonox::Orxonox::getSingleton()->getAudioManagerPointer();
+      audioElem = rootElement_->FirstChildElement("audio");
+
+      if (audioElem)
+      {
+        audioElem = audioElem->FirstChildElement("ambient");
+        if (audioElem)
+        {
+          tNode = 0;
+          //FIXME something is wrong, probably missing ==
+          while( tNode = audioElem->IterateChildren( tNode ) )
+          {
+            if (tNode->Type() == TiXmlNode::ELEMENT)
+            {
+
+              tElem = tNode->ToElement();
+              std::string elemVal = tElem->Value();
+              if (elemVal == "ogg")
+              {
+                COUT(3) << "Adding sound "<< tElem->Attribute("src") << std::endl;
+
+                auMan->ambientAdd(tElem->Attribute("src"));
+              }
+            }
+          }
+          auMan->ambientStart();
+        }
+      }
+
+      // Load world
+      worldElem = rootElement_->FirstChildElement("world");
+      if (worldElem)
+      {
+        tNode = 0;
+        //FIXME something is wrong, probably missing ==
+        while (tNode = worldElem->IterateChildren(tNode))
+        {
+          if (tNode->Type() == TiXmlNode::ELEMENT)
+          {
+            tElem = tNode->ToElement();
+            orxonox::Identifier* id = ID(tElem->Value());
+            if (id)
+            {
+              orxonox::BaseObject* obj = id->fabricate();
+              obj->loadParams(tElem);
+            }
+            else
+            {
+              COUT(2) << "Warning: '"<< tElem->Value() <<"' is not a valid classname." << std::endl;
+            }
+          }
+        }
+      }
+
+      if (loadElem)
+      {
+        // FIXME: check for potential initialisation of mLoadOverlay
+        mLoadOverlay->hide();
+      }
+
+
+      COUT(0) << "Loading finished!" << std::endl << std::endl;
+    }
+  }
+
+  LevelLoader::~LevelLoader()
+  {
+
+  }
+
+}
Index: code/branches/input/src/asylum/loader/LevelLoader.h
===================================================================
--- code/branches/input/src/asylum/loader/LevelLoader.h	(revision 944)
+++ code/branches/input/src/asylum/loader/LevelLoader.h	(revision 944)
@@ -0,0 +1,57 @@
+/**
+* Orxonox - www.orxonox.net
+* Level Loader class
+*
+* @author Nicolas Perrenoud <nicolape@ee.ethz.ch>
+*/
+
+#ifndef _LevelLoader_H__
+#define _LevelLoader_H__
+
+#include <string>
+
+#include "LoaderPrereqs.h"
+#include "util/tinyxml/tinyxml.h"
+
+class TiXmlDocument;   // Forward declaration
+class TiXmlElement;    // Forward declaration
+
+namespace loader
+{
+  class _LoaderExport LevelLoader
+  {
+  public:
+    // Constructors, loads the level file and some information data
+    LevelLoader(std::string file, std::string dir = "levels");
+    // Destructor
+    virtual ~LevelLoader();
+    // Loads all level data
+    void loadLevel();
+
+    // Getters
+    inline std::string name() {return name_; };
+    inline std::string description() {return description_; };
+    inline std::string image() {return image_; };
+  private:
+    //! Level information
+    std::string name_;
+    std::string description_;
+    std::string image_;
+    std::string loadingBackgroundColor_;
+    std::string loadingBackgroundImage_;
+    std::string loadingBarImage_;
+    std::string loadingBarTop_;
+    std::string loadingBarLeft_;
+    std::string loadingBarWidth_;
+    std::string loadingBarHeight_;
+
+    //! Set to true if it was possible to load the level file
+    bool valid_;
+
+    // Xml-Stuff
+    TiXmlDocument doc_;
+    TiXmlElement *rootElement_;
+  };
+}
+
+#endif /* _LevelLoader_H__ */
Index: code/branches/input/src/asylum/loader/LoaderPrereqs.h
===================================================================
--- code/branches/input/src/asylum/loader/LoaderPrereqs.h	(revision 944)
+++ code/branches/input/src/asylum/loader/LoaderPrereqs.h	(revision 944)
@@ -0,0 +1,70 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   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:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file  OrxonoxPrereq.cc
+ @brief Contains all the necessary forward declarations for all classes, structs and enums.
+ */
+
+#ifndef _LoaderPrereqs_H__
+#define _LoaderPrereqs_H__
+
+#include "orxonox/OrxonoxPlatform.h"
+
+// Compile loader directly in orxonox executable, if on Visual Studio platform
+#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC && defined(ORXONOX_SHARED_BUILD)
+#  define LOADER_SHARED_BUILD
+#endif
+
+//-----------------------------------------------------------------------
+// Shared library settings
+//-----------------------------------------------------------------------
+#if (ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32) && !defined( LOADER_STATIC_BUILD )
+#  ifdef LOADER_SHARED_BUILD
+#    define _LoaderExport __declspec(dllexport)
+#  else
+#    if defined( __MINGW32__ )
+#      define _LoaderExport
+#    else
+#      define _LoaderExport __declspec(dllimport)
+#    endif
+#  endif
+#elif defined ( ORXONOX_GCC_VISIBILITY )
+#  define _LoaderExport  __attribute__ ((visibility("default")))
+#else
+#  define _LoaderExport
+#endif
+
+
+//-----------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------
+namespace loader {
+  class LevelLoader;
+}
+
+#endif /* _LoaderPrereqs_H__ */
Index: code/branches/input/src/asylum/network/PacketBufferTestExt.cc
===================================================================
--- code/branches/input/src/asylum/network/PacketBufferTestExt.cc	(revision 944)
+++ code/branches/input/src/asylum/network/PacketBufferTestExt.cc	(revision 944)
@@ -0,0 +1,81 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   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:
+*      ...
+*   Co-authors:
+*      ...
+*
+*/
+
+#include <string>
+#include <iostream>
+#include <enet/enet.h>
+#include <boost/thread/thread.hpp>
+
+#include "util/Sleep.h"
+#include "PacketBuffer.h"
+#include "PacketBuffer.cc"
+
+using namespace network;
+
+void write(PacketBuffer *test){
+  ENetEvent event;
+  ENetPacket *packet;
+  if(test->isEmpty())
+    std::cout << "empty buffer" << std::endl;
+  for(int i=0; i<10; i++){
+    std::string temp = "packet ";
+    packet = enet_packet_create("packet", strlen("packet ")+1,
+      ENET_PACKET_FLAG_RELIABLE);
+    std::cout << i << ": pushing " << packet->data << std::endl;
+    event.packet=packet;
+    test->push(&event);
+    if(i==5)
+      usleep(200000);
+  }
+  test->setClosed(true);
+  return;
+}
+
+void read(PacketBuffer *test){
+  //test->print();
+  // exit if the queue is closed and empty
+  while(!test->isClosed() || !test->isEmpty()){
+    // only pop if the queue isn't empty
+    while(!test->isEmpty()){
+      std::cout << "We popped the value " << test->pop()->data << std::endl;
+    }
+  }
+  return;
+}
+
+
+int main(int argc, char **argv[]){
+  PacketBuffer test = PacketBuffer();
+  boost::thread thrd1(boost::bind(&write, &test));
+  boost::thread thrd2(boost::bind(&read, &test));
+
+  thrd1.join();
+  thrd2.join();
+
+  return 0;
+}
+
Index: code/branches/input/src/asylum/orxonox/AIClass.h
===================================================================
--- code/branches/input/src/asylum/orxonox/AIClass.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/AIClass.h	(revision 944)
@@ -0,0 +1,95 @@
+#ifndef _AIClass_H__
+#define _AIClass_H__
+
+#include "util/Vector3.h"
+
+namespace orxonox
+{
+  class AIPilot
+  {
+
+
+    /*
+    TASKS:                                                                         Requirements:
+
+    - Change actual Speed to required Speed                                          - Speed as Vector3 , spaceship(?) -> pilot attached to it or vice versa (?)
+    - Open fire, if allowed                                                          - Status of the fleet commander -> allowed to fire , fly etc.
+    - differ friend, ally and enemy                                                  - Lists of ships + who controls them
+    - report ship status to fleet commander                                          - Call own ship status -> ammo, damage etc.
+
+
+
+    */
+
+  public:
+    Vector3 speed;
+
+
+
+    //default constructor
+    AIPilot() {
+      speed = (1,0,0);
+    }
+
+    Vector3 steer(Vector3 reqSpeed) {
+      Quaternion sRotation = speed.getRotationTo(reqSpeed);
+      Radian rollarc = sRotation.getRoll();
+      Radian pitcharc = sRotation.getPitch();
+      Radian yawarc = sRotation.getYaw();
+      return Vector3((float)rollarc.valueRadians(), (float)pitcharc.valueRadians(), (float)yawarc.valueRadians());
+    }
+
+
+  };
+
+  class AIFleetCommander : public  AIPilot {
+
+
+    /*
+    TASKS:                                                                       Requirements:
+
+    - Same tasks as AI_Pilot (only if shipcontrol)                                   - Same as AI_Pilot
+    - Calculate required Speed for any ship in Fleet                                 - Knows all calculation functions
+    - Request fleet status and report to commander                                   - Better list of all ships -> more data for fleet ships
+
+
+
+    */
+
+  public:
+
+
+    //default constructor
+    AIFleetCommander() {
+
+    }
+
+
+
+  };
+
+  class AICommander : public  AIFleetCommander
+  {
+
+
+    /*
+    TASKS:                                                                     Requirements:
+
+    - Decide on general tactics                                                      - List of general fleet status + all possible information on enemies
+    - Save and load tactical data (?)                                                - files with tactical data, e.g. success of strategy etc.
+
+
+
+    */
+
+    //default constructor
+    AICommander() {
+
+    }
+
+
+  };
+
+}
+
+#endif /* _AIClass_H__ */
Index: code/branches/input/src/asylum/orxonox/Arrival.h
===================================================================
--- code/branches/input/src/asylum/orxonox/Arrival.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/Arrival.h	(revision 944)
@@ -0,0 +1,82 @@
+
+// Arrival Class
+
+
+#ifndef _Arrival_H__
+#define _Arrival_H__
+
+#include "util/Math.h"
+
+namespace orxonox
+{
+  class Arrival
+  {
+  public:
+    Vector3 location;           //!< locationvector of the element
+    Vector3 speed;              //!< speedvector of the element
+    Vector3 acceleration;       //!< accelerationvector of the element
+    Vector3 target;             //!< target to arrive
+    int accelerationForwards;   //!< from steering-interface
+    int MaxSpeed;               //!< from steering-interface
+
+
+    Arrival() {
+      acceleration = (0,0,0);
+      speed = (0,0,0);
+      location = (0,0,0);
+      target = (0,0,0);
+    }
+
+    Arrival(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
+      acceleration = acceleration_;
+      speed = speed_;
+      location = location_;
+      target = target_;
+    }
+
+    void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
+      acceleration = acceleration_;
+      speed = speed_;
+      location = location_;
+      target = target_;
+    }
+
+    void setTarget(Vector3 target_) {
+      setValues(this->location, this->speed, this->acceleration, target_);
+    }
+
+    Vector3 getDirection() {
+      Vector3 direction = target-location;
+    }
+
+    double relativeDirectApproach() {
+      // Maxspeed / accelerationForwards = time needed to break with max acceleration
+      // 2*getDistance()length/(MaxSpeed/accelerationForwards)^2 = required acceleration to arrive at the target with speed = 0
+      return (accelerationForwards / (2*getDirection().length() / ((MaxSpeed/accelerationForwards)*(MaxSpeed/accelerationForwards))) );
+    }
+
+    void Approach() {
+      Quaternion rotation = Quaternion(0,0,0,0);
+      if (relativeDirectApproach() > 1)
+      {
+        float length = speed.length();
+        speed = (speed+getDirection());
+        speed.normalise();
+        speed = speed*length;
+        if (relativeDirectApproach() > 4)
+        {
+          //accelerate
+        }
+        else
+        {
+          // speed will stay constant
+        }
+      }
+      else {
+      }
+    }
+
+  };
+}
+
+#endif /* _Arrival_H__ */
Index: code/branches/input/src/asylum/orxonox/Flocking.h
===================================================================
--- code/branches/input/src/asylum/orxonox/Flocking.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/Flocking.h	(revision 944)
@@ -0,0 +1,140 @@
+
+//Headerfile: Flocking.h
+
+#ifndef _Flocking_H__
+#define _Flocking_H__
+
+#include "util/Math.h"
+
+namespace orxonox
+{
+  class Element // An element that flocks
+  {
+
+  public:
+    Vector3 location;                       //!< locationvector of the element
+    Vector3 speed;                          //!< speedvector of the element
+    Vector3 acceleration;                   //!< accelerationvector of the element
+    bool movable;                                 //!< movability of the element, (false) gives the possiblity that an object can`t be moved by flocking but still gets into the calculation
+    static int const SEPERATIONDISTANCE = 300;    //!< detectionradius of seperation
+    static int const ALIGNMENTDISTANCE = 300;     //!< detectionradius of alignment
+    static int const COHESIONDISTANCE = 5000;     //!< detectionradius of cohesion
+    static int const ANZELEMENTS = 9;             //!< number of elements
+
+    //! default constructor
+    Element() {
+      acceleration = Vector3(0,0,0);
+      speed = Vector3(0,0,0);
+      location = Vector3(0,0,0);
+      movable = true;
+    }
+
+    /** constructor
+    *  @param location_ sets locationvector of the element
+    *  @param speed_ sets speedvector of the element
+    *  @param acceleration_ sets accelerationvector of the element
+    *  @param movable_ sets movability of the element
+    */
+    Element(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) {
+      acceleration = acceleration_;
+      speed = speed_;
+      location = location_;
+      movable = movable_;
+    }
+
+    //! function to chance values of an element
+    void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) {
+      acceleration = acceleration_;
+      speed = speed_;
+      location = location_;
+      movable = movable_;
+    }
+
+    /** calculates the distance between the element and an other point given by temp
+    * @param e remote object to calculate distance to
+    */
+    float getDistance(Element e) {
+      Vector3 distance = e.location - location;
+      return distance.length();
+    }
+
+    //! updates the data of an element
+    void update(Element arrayOfElements[]) {
+      if (this->movable == true) {calculateAcceleration(arrayOfElements);} //if element is movable, calculate acceleration
+    }
+
+    //! calculates the new acceleration of an element
+    void calculateAcceleration(Element arrayOfElements[]) {
+      acceleration = separation(arrayOfElements) + alignment(arrayOfElements) + cohesion(arrayOfElements);  //acceleration consisting of flocking-functions
+    }
+
+    //! separation-function (keep elements separated, avoid crashs)
+    Vector3 separation(Element arrayOfElements[]) {
+      using namespace Ogre;
+      Vector3 steering = Vector3(0,0,0); //steeringvector
+      Vector3 inverseDistance = Vector3(0,0,0);  //vector pointing away from possible collisions
+      int numberOfNeighbour = 0;  //number of observed neighbours
+      float distance = 0;  // distance to the actual element
+      for(int i=0; i<ANZELEMENTS; i++) {  //go through all elements
+        Element actual = arrayOfElements[i];  //get the actual element
+        distance = getDistance(actual);  //get distance between this and actual
+        if ((distance > 0) && (distance < SEPERATIONDISTANCE)) {  //do only if actual is inside detectionradius
+          inverseDistance = (0,0,0);
+          inverseDistance = location-actual.location;  //calculate the distancevector heading towards this
+          //adaptation of the inverseDistance to the distance
+          if ((distance < 200) && (distance >= 120)) {inverseDistance = 2*inverseDistance;}
+          if ((distance < 120) && (distance >= 80)) {inverseDistance = 5*inverseDistance;}
+          if ((distance < 80) && (distance >= 40)) {inverseDistance = 10*inverseDistance;}
+          if ((distance < 40) && (distance > 0)) {inverseDistance = 10*inverseDistance;}
+          steering = steering + inverseDistance;  //add up all significant steeringvectors
+          numberOfNeighbour++;  //counts the elements inside the detectionradius
+        }
+      }
+      if(numberOfNeighbour > 0) { steering = steering / (float)numberOfNeighbour; }  //devide the sum of steeringvectors by the number of elements -> separation steeringvector
+      return steering;
+    }
+
+    //! alignment-function (lead elements to the same heading)
+    Vector3 alignment(Element arrayOfElements[]) {
+      using namespace Ogre;
+      Vector3 steering = Vector3(0,0,0); //steeringvector
+      int numberOfNeighbour = 0;  //number of observed neighbours
+      float distance = 0;
+      //go through all elements
+      for(int i=0; i<ANZELEMENTS; i++) {  //just working with 3 elements at the moment
+        Element actual = arrayOfElements[i];  //get the actual element
+        float distance = getDistance(actual);  //get distance between this and actual
+        if ((distance > 0) && (distance < ALIGNMENTDISTANCE)) {  //check if actual element is inside detectionradius
+          steering = steering + actual.speed;  //add up all speedvectors inside the detectionradius
+          numberOfNeighbour++;  //counts the elements inside the detectionradius
+        }
+      }
+      if(numberOfNeighbour > 0) { steering = steering / (float)numberOfNeighbour; }  //devide the sum of steeringvectors by the number of elements -> alignment steeringvector
+      return steering;
+    }
+
+    //! cohseion-function (keep elements close to each other)
+    Vector3 cohesion(Element arrayOfElements[]) {
+      using namespace Ogre;
+      Vector3 steering = Vector3(0,0,0); //steeringvector
+      int numberOfNeighbour = 0;  //number of observed neighbours
+      float distance = 0;
+      //go through all elements
+      for(int i=0; i<ANZELEMENTS; i++) {  //just working with 3 elements at the moment
+        Element actual = arrayOfElements[i];  //get the actual element
+        float distance = getDistance(actual);  //get distance between this and actual
+        if ((distance > 0) && (distance < COHESIONDISTANCE)) {  //check if actual element is inside detectionradius
+          steering = steering + actual.location;  //add up all locations of elements inside the detectionradius
+          numberOfNeighbour++;  //counts the elements inside the detectionradius
+        }
+      }
+      if(numberOfNeighbour > 0) {
+        steering = steering  / (float)numberOfNeighbour;  //devide the sum steeringvector by the number of elements -> cohesion steeringvector
+        steering = steering - this->location;  //transform the vector for the ship
+      }
+      return steering;
+    }
+  };     //End of class Element
+}
+
+#endif /* _Flocking_H__*/
Index: code/branches/input/src/asylum/orxonox/InputManager.cc
===================================================================
--- code/branches/input/src/asylum/orxonox/InputManager.cc	(revision 944)
+++ code/branches/input/src/asylum/orxonox/InputManager.cc	(revision 944)
@@ -0,0 +1,390 @@
+#include "OrxonoxStableHeaders.h"
+
+#include "InputManager.h"
+
+InputManager *InputManager::mInputManager;
+
+InputManager::InputManager( void ) :
+    mMouse( 0 ), mKeyboard( 0 ), mInputSystem( 0 ) {}
+
+InputManager::~InputManager( void ) {
+  if( mInputSystem ) {
+    if( mMouse ) {
+      mInputSystem->destroyInputObject( mMouse );
+      mMouse = 0;
+    }
+
+    if( mKeyboard ) {
+      mInputSystem->destroyInputObject( mKeyboard );
+      mKeyboard = 0;
+    }
+
+    if( mJoysticks.size() > 0 ) {
+      itJoystick    = mJoysticks.begin();
+      itJoystickEnd = mJoysticks.end();
+      for(; itJoystick != itJoystickEnd; ++itJoystick ) {
+        mInputSystem->destroyInputObject( *itJoystick );
+      }
+
+      mJoysticks.clear();
+    }
+
+        // If you use OIS1.0RC1 or above, uncomment this line
+        // and comment the line below it
+    mInputSystem->destroyInputSystem( mInputSystem );
+        //mInputSystem->destroyInputSystem();
+    mInputSystem = 0;
+
+        // Clear Listeners
+    mKeyListeners.clear();
+    mMouseListeners.clear();
+    mJoystickListeners.clear();
+  }
+}
+
+void InputManager::initialise( Ogre::RenderWindow *renderWindow ) {
+  if( !mInputSystem ) {
+        // Setup basic variables
+    OIS::ParamList paramList;
+    size_t windowHnd = 0;
+    std::ostringstream windowHndStr;
+
+        // Get window handle
+    renderWindow->getCustomAttribute( "WINDOW", &windowHnd );
+
+        // Fill parameter list
+    windowHndStr << (unsigned int) windowHnd;
+    paramList.insert( std::make_pair( std::string( "WINDOW" ), windowHndStr.str() ) );
+
+        // Create inputsystem
+    mInputSystem = OIS::InputManager::createInputSystem( paramList );
+
+        // If possible create a buffered keyboard
+        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISKeyboard) > 0) {
+      if( mInputSystem->numKeyboards() > 0 ) {
+//     if (mInputSystem->getNumberOfDevices(OIS::OISKeyboard) > 0) {
+      mKeyboard = static_cast<OIS::Keyboard*>( mInputSystem->createInputObject( OIS::OISKeyboard, true ) );
+      mKeyboard->setEventCallback( this );
+    }
+
+        // If possible create a buffered mouse
+        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISMouse) > 0) {
+      if( mInputSystem->numMice() > 0 ) {
+//     if (mInputSystem->getNumberOfDevices(OIS::OISMouse) > 0) {
+      mMouse = static_cast<OIS::Mouse*>( mInputSystem->createInputObject( OIS::OISMouse, true ) );
+      mMouse->setEventCallback( this );
+
+            // Get window size
+      unsigned int width, height, depth;
+      int left, top;
+      renderWindow->getMetrics( width, height, depth, left, top );
+
+            // Set mouse region
+      this->setWindowExtents( width, height );
+    }
+
+        // If possible create all joysticks in buffered mode
+        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISJoyStick) > 0) {
+    if( mInputSystem->numJoySticks() > 0 ) {
+//     if (mInputSystem->getNumberOfDevices(OIS::OISJoyStick) > 0) {
+       mJoysticks.resize( mInputSystem->numJoySticks() );
+//       mJoysticks.resize( mInputSystem->getNumberOfDevices(OIS::OISJoyStick) );
+
+      itJoystick    = mJoysticks.begin();
+      itJoystickEnd = mJoysticks.end();
+      for(; itJoystick != itJoystickEnd; ++itJoystick ) {
+        (*itJoystick) = static_cast<OIS::JoyStick*>( mInputSystem->createInputObject( OIS::OISJoyStick, true ) );
+        (*itJoystick)->setEventCallback( this );
+      }
+    }
+  }
+}
+
+void InputManager::capture( void ) {
+    // Need to capture / update each device every frame
+  if( mMouse ) {
+    mMouse->capture();
+  }
+
+  if( mKeyboard ) {
+    mKeyboard->capture();
+  }
+
+  if( mJoysticks.size() > 0 ) {
+    itJoystick    = mJoysticks.begin();
+    itJoystickEnd = mJoysticks.end();
+    for(; itJoystick != itJoystickEnd; ++itJoystick ) {
+      (*itJoystick)->capture();
+    }
+  }
+}
+
+void InputManager::addKeyListener( OIS::KeyListener *keyListener, const std::string& instanceName ) {
+  if( mKeyboard ) {
+        // Check for duplicate items
+    itKeyListener = mKeyListeners.find( instanceName );
+    if( itKeyListener == mKeyListeners.end() ) {
+      mKeyListeners[ instanceName ] = keyListener;
+    }
+    else {
+            // Duplicate Item
+    }
+  }
+}
+
+void InputManager::addMouseListener( OIS::MouseListener *mouseListener, const std::string& instanceName ) {
+  if( mMouse ) {
+        // Check for duplicate items
+    itMouseListener = mMouseListeners.find( instanceName );
+    if( itMouseListener == mMouseListeners.end() ) {
+      mMouseListeners[ instanceName ] = mouseListener;
+    }
+    else {
+            // Duplicate Item
+    }
+  }
+}
+
+void InputManager::addJoystickListener( OIS::JoyStickListener *joystickListener, const std::string& instanceName ) {
+  if( mJoysticks.size() > 0 ) {
+        // Check for duplicate items
+    itJoystickListener = mJoystickListeners.find( instanceName );
+    if( itJoystickListener == mJoystickListeners.end() ) {
+      mJoystickListeners[ instanceName ] = joystickListener;
+    }
+    else {
+            // Duplicate Item
+    }
+  }
+}
+
+void InputManager::removeKeyListener( const std::string& instanceName ) {
+    // Check if item exists
+  itKeyListener = mKeyListeners.find( instanceName );
+  if( itKeyListener != mKeyListeners.end() ) {
+    mKeyListeners.erase( itKeyListener );
+  }
+  else {
+        // Doesn't Exist
+  }
+}
+
+void InputManager::removeMouseListener( const std::string& instanceName ) {
+    // Check if item exists
+  itMouseListener = mMouseListeners.find( instanceName );
+  if( itMouseListener != mMouseListeners.end() ) {
+    mMouseListeners.erase( itMouseListener );
+  }
+  else {
+        // Doesn't Exist
+  }
+}
+
+void InputManager::removeJoystickListener( const std::string& instanceName ) {
+    // Check if item exists
+  itJoystickListener = mJoystickListeners.find( instanceName );
+  if( itJoystickListener != mJoystickListeners.end() ) {
+    mJoystickListeners.erase( itJoystickListener );
+  }
+  else {
+        // Doesn't Exist
+  }
+}
+
+void InputManager::removeKeyListener( OIS::KeyListener *keyListener ) {
+  itKeyListener    = mKeyListeners.begin();
+  itKeyListenerEnd = mKeyListeners.end();
+  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
+    if( itKeyListener->second == keyListener ) {
+      mKeyListeners.erase( itKeyListener );
+      break;
+    }
+  }
+}
+
+void InputManager::removeMouseListener( OIS::MouseListener *mouseListener ) {
+  itMouseListener    = mMouseListeners.begin();
+  itMouseListenerEnd = mMouseListeners.end();
+  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
+    if( itMouseListener->second == mouseListener ) {
+      mMouseListeners.erase( itMouseListener );
+      break;
+    }
+  }
+}
+
+void InputManager::removeJoystickListener( OIS::JoyStickListener *joystickListener ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if( itJoystickListener->second == joystickListener ) {
+      mJoystickListeners.erase( itJoystickListener );
+      break;
+    }
+  }
+}
+
+void InputManager::removeAllListeners( void ) {
+  mKeyListeners.clear();
+  mMouseListeners.clear();
+  mJoystickListeners.clear();
+}
+
+void InputManager::removeAllKeyListeners( void ) {
+  mKeyListeners.clear();
+}
+
+void InputManager::removeAllMouseListeners( void ) {
+  mMouseListeners.clear();
+}
+
+void InputManager::removeAllJoystickListeners( void ) {
+  mJoystickListeners.clear();
+}
+
+void InputManager::setWindowExtents( int width, int height ) {
+    // Set mouse region (if window resizes, we should alter this to reflect as well)
+  const OIS::MouseState &mouseState = mMouse->getMouseState();
+  mouseState.width  = width;
+  mouseState.height = height;
+}
+
+OIS::Mouse* InputManager::getMouse( void ) {
+  return mMouse;
+}
+
+OIS::Keyboard* InputManager::getKeyboard( void ) {
+  return mKeyboard;
+}
+
+OIS::JoyStick* InputManager::getJoystick( unsigned int index ) {
+    // Make sure it's a valid index
+  if( index < mJoysticks.size() ) {
+    return mJoysticks[ index ];
+  }
+
+  return 0;
+}
+
+int InputManager::getNumOfJoysticks( void ) {
+    // Cast to keep compiler happy ^^
+  return (int) mJoysticks.size();
+}
+
+bool InputManager::keyPressed( const OIS::KeyEvent &e ) {
+  itKeyListener    = mKeyListeners.begin();
+  itKeyListenerEnd = mKeyListeners.end();
+  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
+    if(!itKeyListener->second->keyPressed( e ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::keyReleased( const OIS::KeyEvent &e ) {
+  itKeyListener    = mKeyListeners.begin();
+  itKeyListenerEnd = mKeyListeners.end();
+  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
+    if(!itKeyListener->second->keyReleased( e ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::mouseMoved( const OIS::MouseEvent &e ) {
+  itMouseListener    = mMouseListeners.begin();
+  itMouseListenerEnd = mMouseListeners.end();
+  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
+    if(!itMouseListener->second->mouseMoved( e ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
+  itMouseListener    = mMouseListeners.begin();
+  itMouseListenerEnd = mMouseListeners.end();
+  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
+    if(!itMouseListener->second->mousePressed( e, id ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
+  itMouseListener    = mMouseListeners.begin();
+  itMouseListenerEnd = mMouseListeners.end();
+  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
+    if(!itMouseListener->second->mouseReleased( e, id ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::povMoved( const OIS::JoyStickEvent &e, int pov ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->povMoved( e, pov ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::axisMoved( const OIS::JoyStickEvent &e, int axis ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->axisMoved( e, axis ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::sliderMoved( const OIS::JoyStickEvent &e, int sliderID ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->sliderMoved( e, sliderID ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::buttonPressed( const OIS::JoyStickEvent &e, int button ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->buttonPressed( e, button ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::buttonReleased( const OIS::JoyStickEvent &e, int button ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->buttonReleased( e, button ))
+      break;
+  }
+
+  return true;
+}
+
+InputManager* InputManager::getSingletonPtr( void ) {
+  if( !mInputManager ) {
+    mInputManager = new InputManager();
+  }
+
+  return mInputManager;
+}
Index: code/branches/input/src/asylum/orxonox/InputManager.h
===================================================================
--- code/branches/input/src/asylum/orxonox/InputManager.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/InputManager.h	(revision 944)
@@ -0,0 +1,93 @@
+#ifndef _InputManager_H__
+#define _InputManager_H__
+
+#ifdef WIN32
+#include <OIS/OISMouse.h>
+#include <OIS/OISKeyboard.h>
+#include <OIS/OISJoyStick.h>
+#include <OIS/OISInputManager.h>
+#else
+#include <OISMouse.h>
+#include <OISKeyboard.h>
+#include <OISJoyStick.h>
+#include <OISInputManager.h>
+#endif
+
+#include <OgreRenderWindow.h>
+
+#include "OrxonoxPrereqs.h"
+
+class _OrxonoxExport InputManager : public OIS::KeyListener, public OIS::MouseListener, public OIS::JoyStickListener {
+  public:
+    virtual ~InputManager( void );
+
+    void initialise( Ogre::RenderWindow *renderWindow );
+    void capture( void );
+
+    void addKeyListener( OIS::KeyListener *keyListener, const std::string& instanceName );
+    void addMouseListener( OIS::MouseListener *mouseListener, const std::string& instanceName );
+    void addJoystickListener( OIS::JoyStickListener *joystickListener, const std::string& instanceName );
+
+    void removeKeyListener( const std::string& instanceName );
+    void removeMouseListener( const std::string& instanceName );
+    void removeJoystickListener( const std::string& instanceName );
+
+    void removeKeyListener( OIS::KeyListener *keyListener );
+    void removeMouseListener( OIS::MouseListener *mouseListener );
+    void removeJoystickListener( OIS::JoyStickListener *joystickListener );
+
+    void removeAllListeners( void );
+    void removeAllKeyListeners( void );
+    void removeAllMouseListeners( void );
+    void removeAllJoystickListeners( void );
+
+    void setWindowExtents( int width, int height );
+
+    OIS::Mouse*    getMouse( void );
+    OIS::Keyboard* getKeyboard( void );
+    OIS::JoyStick* getJoystick( unsigned int index );
+
+    int getNumOfJoysticks( void );
+
+    static InputManager* getSingletonPtr( void );
+  private:
+    InputManager( void );
+    InputManager( const InputManager& ) { }
+    InputManager & operator = ( const InputManager& );
+
+    bool keyPressed( const OIS::KeyEvent &e );
+    bool keyReleased( const OIS::KeyEvent &e );
+
+    bool mouseMoved( const OIS::MouseEvent &e );
+    bool mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id );
+    bool mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id );
+
+    bool povMoved( const OIS::JoyStickEvent &e, int pov );
+    bool axisMoved( const OIS::JoyStickEvent &e, int axis );
+    bool sliderMoved( const OIS::JoyStickEvent &e, int sliderID );
+    bool buttonPressed( const OIS::JoyStickEvent &e, int button );
+    bool buttonReleased( const OIS::JoyStickEvent &e, int button );
+
+    OIS::Mouse        *mMouse;
+    OIS::Keyboard     *mKeyboard;
+    OIS::InputManager *mInputSystem;
+
+    std::vector<OIS::JoyStick*> mJoysticks;
+    std::vector<OIS::JoyStick*>::iterator itJoystick;
+    std::vector<OIS::JoyStick*>::iterator itJoystickEnd;
+
+    std::map<std::string, OIS::KeyListener*> mKeyListeners;
+    std::map<std::string, OIS::MouseListener*> mMouseListeners;
+    std::map<std::string, OIS::JoyStickListener*> mJoystickListeners;
+
+    std::map<std::string, OIS::KeyListener*>::iterator itKeyListener;
+    std::map<std::string, OIS::MouseListener*>::iterator itMouseListener;
+    std::map<std::string, OIS::JoyStickListener*>::iterator itJoystickListener;
+
+    std::map<std::string, OIS::KeyListener*>::iterator itKeyListenerEnd;
+    std::map<std::string, OIS::MouseListener*>::iterator itMouseListenerEnd;
+    std::map<std::string, OIS::JoyStickListener*>::iterator itJoystickListenerEnd;
+
+    static InputManager *mInputManager;
+};
+#endif /* _InputManager_H__ */
Index: code/branches/input/src/asylum/orxonox/SpaceshipSteering.cc
===================================================================
--- code/branches/input/src/asylum/orxonox/SpaceshipSteering.cc	(revision 944)
+++ code/branches/input/src/asylum/orxonox/SpaceshipSteering.cc	(revision 944)
@@ -0,0 +1,233 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   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:
+*      ...
+*   Co-authors:
+*      ...
+*
+*/
+
+#include "OrxonoxStableHeaders.h"
+
+#include <OgreNode.h>
+#include <OgreSceneNode.h>
+
+#include "core/Debug.h"
+#include "util/Math.h"
+#include "SpaceshipSteering.h"
+
+namespace orxonox
+{
+
+  SpaceshipSteering::SpaceshipSteering(float maxSpeedForward, float
+    maxSpeedRotateUpDown, float maxSpeedRotateRightLeft, float
+    maxSpeedLoopRightLeft)
+  {
+
+      COUT(3) << "Info: Steering was loaded" << std::endl;
+      moveForward_ = 0;
+      rotateUp_ = 0;
+      rotateDown_ = 0;
+      rotateRight_ = 0;
+      rotateLeft_ = 0;
+      loopRight_ = 0;
+      loopLeft_ = 0;
+      brakeForward_ = 0;
+      brakeRotate_ = 0;
+      brakeLoop_ = 0;
+      speedForward_ = 0;
+      speedRotateUpDown_ = 0;
+      speedRotateRightLeft_ = 0;
+      speedLoopRightLeft_ = 0;
+      maxSpeedForward_ = maxSpeedForward;
+      maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
+      maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
+      maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
+      accelerationForward_ = 0;
+      accelerationRotateUpDown_ = 0;
+      accelerationRotateRightLeft_ = 0;
+      accelerationLoopRightLeft_ = 0;
+  }
+
+  void SpaceshipSteering::tick(float time)
+  {
+
+    if(moveForward_ > 0) {
+      accelerationForward_ = moveForward_;
+      if(speedForward_ < maxSpeedForward_)
+        speedForward_ += accelerationForward_*time;
+      if(speedForward_ > maxSpeedForward_)
+        speedForward_ = maxSpeedForward_;
+    }
+    if(moveForward_ <= 0) {
+      accelerationForward_ = brakeForward_;
+      if(speedForward_ > 0)
+        speedForward_ -= accelerationForward_*time;
+      if(speedForward_ < 0)
+        speedForward_ = 0;
+    }
+
+    if(rotateUp_ > 0) {
+      accelerationRotateUpDown_ = rotateUp_;
+      if(speedRotateUpDown_ < maxSpeedRotateUpDown_)
+        speedRotateUpDown_ += accelerationRotateUpDown_*time;
+      if(speedRotateUpDown_ > maxSpeedRotateUpDown_)
+        speedRotateUpDown_ = maxSpeedRotateUpDown_;
+    }
+    if(rotateDown_ > 0) {
+      accelerationRotateUpDown_ = rotateDown_;
+      if(speedRotateUpDown_ > -maxSpeedRotateUpDown_)
+        speedRotateUpDown_ -= accelerationRotateUpDown_*time;
+      if(speedRotateUpDown_ < -maxSpeedRotateUpDown_)
+        speedRotateUpDown_ = -maxSpeedRotateUpDown_;
+    }
+    if(rotateUp_ == 0 && rotateDown_ == 0) {
+      accelerationRotateUpDown_ = brakeRotate_;
+      if(speedRotateUpDown_ > 0)
+        speedRotateUpDown_ -= accelerationRotateUpDown_*time;
+      if(speedRotateUpDown_ < 0)
+        speedRotateUpDown_ += accelerationRotateUpDown_*time;
+      if(fabsf(speedRotateUpDown_)<accelerationRotateUpDown_*time)
+        speedRotateUpDown_ = 0;
+    }
+
+    if(rotateRight_ > 0) {
+      accelerationRotateRightLeft_ = rotateRight_;
+      if(speedRotateRightLeft_ > -maxSpeedRotateRightLeft_)
+        speedRotateRightLeft_ -= accelerationRotateRightLeft_*time;
+      if(speedRotateRightLeft_ < -maxSpeedRotateRightLeft_)
+        speedRotateRightLeft_ = -maxSpeedRotateRightLeft_;
+    }
+    if(rotateLeft_ > 0) {
+      accelerationRotateRightLeft_ = rotateLeft_;
+      if(speedRotateRightLeft_ < maxSpeedRotateRightLeft_)
+        speedRotateRightLeft_ += accelerationRotateRightLeft_*time;
+      if(speedRotateRightLeft_ > maxSpeedRotateRightLeft_)
+        speedRotateRightLeft_ = maxSpeedRotateRightLeft_;
+    }
+    if(rotateRight_ == 0 && rotateLeft_ == 0) {
+      accelerationRotateRightLeft_ = brakeRotate_;
+      if(speedRotateRightLeft_ > 0)
+        speedRotateRightLeft_ -= accelerationRotateRightLeft_*time;
+      if(speedRotateRightLeft_ < 0)
+        speedRotateRightLeft_ += accelerationRotateRightLeft_*time;
+      if(fabsf(speedRotateRightLeft_)<accelerationRotateRightLeft_*time)
+        speedRotateRightLeft_ = 0;
+    }
+
+    if(loopRight_ > 0) {
+      accelerationLoopRightLeft_ = loopRight_;
+      if(speedLoopRightLeft_ < maxSpeedLoopRightLeft_)
+        speedLoopRightLeft_ += accelerationLoopRightLeft_*time;
+      if(speedLoopRightLeft_ > maxSpeedLoopRightLeft_)
+        speedLoopRightLeft_ = maxSpeedLoopRightLeft_;
+    }
+    if(loopLeft_ > 0) {
+      accelerationLoopRightLeft_ = loopLeft_;
+      if(speedLoopRightLeft_ > -maxSpeedLoopRightLeft_)
+        speedLoopRightLeft_ -= accelerationLoopRightLeft_*time;
+      if(speedLoopRightLeft_ < -maxSpeedLoopRightLeft_)
+        speedLoopRightLeft_ = -maxSpeedLoopRightLeft_;
+    }
+    if(loopLeft_ == 0 && loopRight_ == 0) {
+      accelerationLoopRightLeft_ = brakeLoop_;
+      if(speedLoopRightLeft_ > 0)
+        speedLoopRightLeft_ -= accelerationLoopRightLeft_*time;
+      if(speedLoopRightLeft_ < 0)
+        speedLoopRightLeft_ += accelerationLoopRightLeft_*time;
+      if(fabsf(speedLoopRightLeft_)<accelerationLoopRightLeft_*time)
+        speedLoopRightLeft_ = 0;
+    }
+
+    Vector3 transVector = Vector3::ZERO;
+    transVector.z = 1;
+    steeringNode_->translate(transVector*speedForward_*time,
+      Ogre::SceneNode::TS_LOCAL);
+    steeringNode_->pitch(Degree(speedRotateUpDown_*time),
+      Ogre::SceneNode::TS_LOCAL);
+    steeringNode_->yaw(Degree(speedRotateRightLeft_*time),
+      Ogre::SceneNode::TS_LOCAL);
+    steeringNode_->roll(Degree(speedLoopRightLeft_*time),
+      Ogre::SceneNode::TS_LOCAL);
+
+  }
+
+  void SpaceshipSteering::moveForward(float moveForward) {
+    moveForward_ = moveForward;
+  }
+
+  void SpaceshipSteering::rotateUp(float rotateUp) {
+    rotateUp_ = rotateUp;
+  }
+
+  void SpaceshipSteering::rotateDown(float rotateDown) {
+    rotateDown_ = rotateDown;
+  }
+
+  void SpaceshipSteering::rotateLeft(float rotateLeft) {
+    rotateLeft_ = rotateLeft;
+  }
+
+  void SpaceshipSteering::rotateRight(float rotateRight) {
+    rotateRight_ = rotateRight;
+  }
+
+  void SpaceshipSteering::loopLeft(float loopLeft) {
+    loopLeft_ = loopLeft;
+  }
+
+  void SpaceshipSteering::loopRight(float loopRight) {
+    loopRight_ = loopRight;
+  }
+
+  void SpaceshipSteering::brakeForward(float brakeForward) {
+    brakeForward_ = brakeForward;
+  }
+
+  void SpaceshipSteering::brakeRotate(float brakeRotate) {
+    brakeRotate_ = brakeRotate;
+  }
+
+  void SpaceshipSteering::brakeLoop(float brakeLoop) {
+    brakeLoop_ = brakeLoop;
+  }
+
+  void SpaceshipSteering::maxSpeedForward(float maxSpeedForward) {
+    maxSpeedForward_ = maxSpeedForward;
+  }
+
+  void SpaceshipSteering::maxSpeedRotateUpDown(float maxSpeedRotateUpDown) {
+    maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
+  }
+
+  void SpaceshipSteering::maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft) {
+    maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
+  }
+
+  void SpaceshipSteering::maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft) {
+    maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
+  }
+
+  void SpaceshipSteering::addNode(Ogre::SceneNode *steeringNode) {
+    steeringNode_ = steeringNode;
+  }
+
+}
Index: code/branches/input/src/asylum/orxonox/SpaceshipSteering.h
===================================================================
--- code/branches/input/src/asylum/orxonox/SpaceshipSteering.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/SpaceshipSteering.h	(revision 944)
@@ -0,0 +1,66 @@
+#ifndef _SpaceShipSteering_H__
+#define _SpaceShipSteering_H__
+
+#include <OgrePrerequisites.h>
+
+#include "OrxonoxPrereqs.h"
+
+namespace orxonox
+{
+  class _OrxonoxExport SpaceshipSteering
+  {
+  public:
+    SpaceshipSteering(float maxSpeedForward, float maxSpeedRotateUpDown,
+      float maxSpeedRotateRightLeft, float maxSpeedLoopRightLeft);
+    void tick(float time);
+    void moveForward(float moveForward);
+    void rotateUp(float rotateUp);
+    void rotateDown(float rotateDown);
+    void rotateRight(float rotateRight);
+    void rotateLeft(float rotateLeft);
+    void loopRight(float loopRight);
+    void loopLeft(float loopLeft);
+    void brakeForward(float brakeForward);
+    void brakeRotate(float brakeRotate);
+    void brakeLoop(float brakeLoop);
+    void maxSpeedForward(float maxSpeedForward);
+    void maxSpeedRotateUpDown(float maxSpeedRotateUpDown);
+    void maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft);
+    void maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft);
+    void addNode(Ogre::SceneNode *steeringNode);
+
+  protected:
+    Ogre::SceneNode *steeringNode_;
+
+  private:
+    float moveForward_;
+    float rotateUp_;
+    float rotateDown_;
+    float rotateRight_;
+    float rotateLeft_;
+    float loopRight_;
+    float loopLeft_;
+    float brakeForward_;
+    float brakeRotate_;
+    float brakeLoop_;
+
+    float speedForward_;
+    float speedRotateUpDown_;
+    float speedRotateRightLeft_;
+    float speedLoopRightLeft_;
+
+    float maxSpeedForward_;
+    float maxSpeedRotateUpDown_;
+    float maxSpeedRotateRightLeft_;
+    float maxSpeedLoopRightLeft_;
+
+    float accelerationForward_;
+    float accelerationRotateUpDown_;
+    float accelerationRotateRightLeft_;
+    float accelerationLoopRightLeft_;
+
+  };
+}
+
+
+#endif /* _SpaceShipSteering_H__ */
Index: code/branches/input/src/asylum/orxonox/objects/SpaceshipSteeringObject.cc
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/SpaceshipSteeringObject.cc	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/SpaceshipSteeringObject.cc	(revision 944)
@@ -0,0 +1,91 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   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:
+ *      ...
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+
+#include <OgreSceneManager.h>
+#include <OgreSceneNode.h>
+#include <OgreRoot.h>
+#include <OgreRenderWindow.h>
+
+#include <string>
+
+#include "../Orxonox.h"
+#include "../GraphicsEngine.h"
+#include "util/tinyxml/tinyxml.h"
+#include "util/Tokenizer.h"
+#include "util/String2Number.h"
+#include "core/CoreIncludes.h"
+#include "SpaceshipSteeringObject.h"
+
+#include "../SpaceshipSteering.h"
+
+namespace orxonox
+{
+    CreateFactory(SpaceshipSteeringObject);
+
+    SpaceshipSteeringObject::SpaceshipSteeringObject()
+    {
+        RegisterObject(SpaceshipSteeringObject);
+    }
+
+    SpaceshipSteeringObject::~SpaceshipSteeringObject()
+    {
+    }
+
+    void SpaceshipSteeringObject::loadParams(TiXmlElement* xmlElem)
+    {
+      SpaceshipSteering* steering = orxonox::Orxonox::getSingleton()->getSteeringPointer();
+
+      if (xmlElem->Attribute("node") && xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft"))
+      {
+        std::string nodeStr = xmlElem->Attribute("node");
+        std::string forwardStr = xmlElem->Attribute("forward");
+        std::string rotateupdownStr = xmlElem->Attribute("rotateupdown");
+        std::string rotaterightleftStr = xmlElem->Attribute("rotaterightleft");
+        std::string looprightleftStr = xmlElem->Attribute("looprightleft");
+
+        float forward, rotateupdown, rotaterightleft, looprightleft;
+        String2Number<float>(forward, forwardStr);
+        String2Number<float>(rotateupdown, rotateupdownStr);
+        String2Number<float>(rotaterightleft, rotaterightleftStr);
+        String2Number<float>(looprightleft, looprightleftStr);
+
+        steering = new SpaceshipSteering(forward, rotateupdown, rotaterightleft, looprightleft);
+
+        Ogre::SceneManager* mgr = orxonox::Orxonox::getSingleton()->getSceneManager();
+        Ogre::SceneNode* sceneNode = (Ogre::SceneNode*)mgr->getRootSceneNode()->getChild(nodeStr);
+
+        steering->addNode(sceneNode);
+
+
+
+
+        COUT(4) << "Loader: Initialized spaceship steering at node " << nodeStr << " values "<< forward << " " << rotateupdown << " "<< rotaterightleft << " "<< looprightleft << " "<< std::endl << std::endl;
+      }
+   }
+}
Index: code/branches/input/src/asylum/orxonox/objects/SpaceshipSteeringObject.h
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/SpaceshipSteeringObject.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/SpaceshipSteeringObject.h	(revision 944)
@@ -0,0 +1,24 @@
+#ifndef _OBJECT_SPACESHIPSTEERING_H__
+#define _OBJECT_SPACESHIPSTEERING_H__
+
+#include "core/BaseObject.h"
+#include "util/tinyxml/tinyxml.h"
+
+namespace orxonox
+{
+    class SpaceshipSteeringObject : public BaseObject
+    {
+        public:
+            SpaceshipSteeringObject();
+            virtual ~SpaceshipSteeringObject();
+
+
+            void loadParams(TiXmlElement* xmlElem);
+
+        private:
+
+
+    };
+}
+
+#endif
Index: code/branches/input/src/asylum/orxonox/objects/Test.h
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/Test.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/Test.h	(revision 944)
@@ -0,0 +1,177 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _Test_H__
+#define _Test_H__
+
+#include "core/BaseObject.h"
+
+namespace orxonox
+{
+    class Interface1 : virtual public OrxonoxClass
+    {
+        protected:
+            Interface1() { RegisterRootObject(Interface1); }
+    };
+
+    class Interface2 : virtual public OrxonoxClass
+    {
+        protected:
+            Interface2() { RegisterRootObject(Interface2); }
+    };
+
+    class A1 : public BaseObject
+    {
+        public:
+            A1() { RegisterObject(A1); }
+    };
+
+    class A2 : public BaseObject
+    {
+        public:
+            A2() { RegisterObject(A2); }
+    };
+
+    class A3: public BaseObject, public Interface1
+    {
+        public:
+            A3() { RegisterObject(A3); }
+    };
+
+    class A1B1 : public A1
+    {
+        public:
+            A1B1() { RegisterObject(A1B1); }
+    };
+
+    class A1B2 : public A1
+    {
+        public:
+            A1B2() { RegisterObject(A1B2); }
+//            virtual void test() = 0;
+    };
+
+    class A2B1 : public A2
+    {
+        public:
+            A2B1() { RegisterObject(A2B1); }
+    };
+
+    class A2B2 : public A2, Interface1
+    {
+        public:
+            A2B2() { RegisterObject(A2B2); }
+    };
+
+    class A3B1 : public A3
+    {
+        public:
+            A3B1() { RegisterObject(A3B1); }
+    };
+
+    class A3B2 : public A3, Interface2
+    {
+        public:
+            A3B2() { RegisterObject(A3B2); }
+    };
+
+    class A1B1C1 : public A1B1
+    {
+        public:
+            A1B1C1() { RegisterObject(A1B1C1); }
+    };
+
+    class A1B1C2 : public A1B1
+    {
+        public:
+            A1B1C2() { RegisterObject(A1B1C2); }
+    };
+
+    class A1B2C1 : public A1B2
+    {
+        public:
+            A1B2C1() { RegisterObject(A1B2C1); }
+//            void test() { std::cout << "test!\n"; }
+    };
+
+    class A2B1C1 : public A2B1, Interface2
+    {
+        public:
+            A2B1C1() { RegisterObject(A2B1C1); }
+    };
+
+    class A2B2C1 : public A2B2
+    {
+        public:
+            A2B2C1() { RegisterObject(A2B2C1); }
+    };
+
+    class A3B1C1 : public A3B1
+    {
+        public:
+            A3B1C1() { RegisterObject(A3B1C1); }
+    };
+
+    class A3B1C2 : public A3B1, Interface2
+    {
+        public:
+            A3B1C2() { RegisterObject(A3B1C2); }
+    };
+
+    class A3B2C1 : public A3B2
+    {
+        public:
+            A3B2C1() { RegisterObject(A3B2C1); }
+    };
+
+    class A3B2C2 : public A3B2
+    {
+        public:
+            A3B2C2() { RegisterObject(A3B2C2); }
+    };
+
+    CreateFactory(A1);
+    CreateFactory(A2);
+    CreateFactory(A3);
+    CreateFactory(A1B1);
+    CreateFactory(A1B2);
+    CreateFactory(A2B1);
+    CreateFactory(A2B2);
+    CreateFactory(A3B1);
+    CreateFactory(A3B2);
+    CreateFactory(A1B1C1);
+    CreateFactory(A1B1C2);
+    CreateFactory(A1B2C1);
+    CreateFactory(A2B1C1);
+    CreateFactory(A2B2C1);
+    CreateFactory(A3B1C1);
+    CreateFactory(A3B1C2);
+    CreateFactory(A3B2C1);
+    CreateFactory(A3B2C2);
+}
+
+#endif
Index: code/branches/input/src/asylum/orxonox/objects/test1.cc
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/test1.cc	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/test1.cc	(revision 944)
@@ -0,0 +1,103 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "test1.h"
+#include "test2.h"
+#include "test3.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    CreateFactory(Test1);
+
+    Test1::Test1()
+    {
+        RegisterObject(Test1);
+
+        this->usefullClass1_ = Class(Test1);
+        this->usefullClass2_ = Class(Test2);
+        this->usefullClass3_ = Class(Test3);
+    }
+
+    Test1::~Test1()
+    {
+    }
+
+    void Test1::tick(float dt)
+    {
+        std::cout << "Test1: " << this << std::endl;
+    }
+
+    bool Test1::usefullClass1isA(Identifier* identifier)
+    {
+        return this->usefullClass1_->isA(identifier);
+    }
+
+    bool Test1::usefullClass2isA(Identifier* identifier)
+    {
+        return this->usefullClass2_->isA(identifier);
+    }
+
+    bool Test1::usefullClass3isA(Identifier* identifier)
+    {
+        return this->usefullClass3_.isA(identifier);
+    }
+
+    void Test1::setUsefullClass1(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test1: usefullClass1->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test1: usefullClass1->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test1: usefullClass1->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass1_ = identifier;
+    }
+
+    void Test1::setUsefullClass2(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test1: usefullClass2->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test1: usefullClass2->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test1: usefullClass2->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass2_ = identifier;
+    }
+
+    void Test1::setUsefullClassOfTypeTest3(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test1: usefullClass3->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test1: usefullClass3->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test1: usefullClass3->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass3_ = identifier;
+    }
+
+    void Test1::loadParams(TiXmlElement* xmlElem)
+    {
+
+
+
+    }
+}
Index: code/branches/input/src/asylum/orxonox/objects/test1.h
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/test1.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/test1.h	(revision 944)
@@ -0,0 +1,36 @@
+#ifndef _Test1_H__
+#define _Test1_H__
+
+#include "core/BaseObject.h"
+#include "Tickable.h"
+#include "test3.h"
+#include "util/tinyxml/tinyxml.h"
+
+namespace orxonox
+{
+    class Test1 : public BaseObject, public Tickable
+    {
+        public:
+            Test1();
+            virtual ~Test1();
+
+            virtual void tick(float dt);
+
+            bool usefullClass1isA(Identifier* identifier);
+            bool usefullClass2isA(Identifier* identifier);
+            bool usefullClass3isA(Identifier* identifier);
+            void setUsefullClass1(Identifier* identifier);
+            void setUsefullClass2(Identifier* identifier);
+            void setUsefullClassOfTypeTest3(Identifier* identifier);
+
+            void loadParams(TiXmlElement* xmlElem);
+
+        private:
+            Identifier* usefullClass1_;
+            Identifier* usefullClass2_;
+            SubclassIdentifier<Test3> usefullClass3_;
+
+    };
+}
+
+#endif
Index: code/branches/input/src/asylum/orxonox/objects/test2.cc
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/test2.cc	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/test2.cc	(revision 944)
@@ -0,0 +1,110 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "test1.h"
+#include "test2.h"
+#include "test3.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    CreateFactory(Test2);
+
+    Test2::Test2()
+    {
+        RegisterObject(Test2);
+
+        this->usefullClass1_ = Class(Test1);
+        this->usefullClass2_ = Class(Test2);
+        this->usefullClass3_ = Class(Test3);
+
+        timer1.setTimer(1, true, this, &Test2::timerFunction1);
+        timer2.setTimer(5, true, this, &Test2::timerFunction2);
+        timer3.setTimer(10, false, this, &Test2::timerFunction3);
+    }
+
+    Test2::~Test2()
+    {
+    }
+
+    void Test2::timerFunction1()
+    {
+        std::cout << "Test2: 1 Sekunde" << std::endl;
+    }
+
+    void Test2::timerFunction2()
+    {
+        std::cout << "Test2: 5 Sekunden" << std::endl;
+    }
+
+    void Test2::timerFunction3()
+    {
+        std::cout << "Test2: 10 Sekunden sind um!" << std::endl;
+    }
+
+    bool Test2::usefullClass1isA(Identifier* identifier)
+    {
+        return this->usefullClass1_->isA(identifier);
+    }
+
+    bool Test2::usefullClass2isA(Identifier* identifier)
+    {
+        return this->usefullClass2_->isA(identifier);
+    }
+
+    bool Test2::usefullClass3isA(Identifier* identifier)
+    {
+        return this->usefullClass3_.isA(identifier);
+    }
+
+    void Test2::setUsefullClass1(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test2: usefullClass1->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test2: usefullClass1->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test2: usefullClass1->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass1_ = identifier;
+    }
+
+    void Test2::setUsefullClass2(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test2: usefullClass2->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test2: usefullClass2->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test2: usefullClass2->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass2_ = identifier;
+    }
+
+    void Test2::setUsefullClassOfTypeTest3(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test2: usefullClass3->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test2: usefullClass3->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test2: usefullClass3->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass3_ = identifier;
+    }
+}
Index: code/branches/input/src/asylum/orxonox/objects/test2.h
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/test2.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/test2.h	(revision 944)
@@ -0,0 +1,39 @@
+#ifndef _Test2_H__
+#define _Test2_H__
+
+#include "core/BaseObject.h"
+#include "../tools/Timer.h"
+
+namespace orxonox
+{
+    class Test3;
+
+    class Test2 : public BaseObject
+    {
+        public:
+            Test2();
+            virtual ~Test2();
+
+            bool usefullClass1isA(Identifier* identifier);
+            bool usefullClass2isA(Identifier* identifier);
+            bool usefullClass3isA(Identifier* identifier);
+            void setUsefullClass1(Identifier* identifier);
+            void setUsefullClass2(Identifier* identifier);
+            void setUsefullClassOfTypeTest3(Identifier* identifier);
+
+            void timerFunction1();
+            void timerFunction2();
+            void timerFunction3();
+
+        private:
+            Identifier* usefullClass1_;
+            Identifier* usefullClass2_;
+            SubclassIdentifier<Test3> usefullClass3_;
+
+            Timer<Test2> timer1;
+            Timer<Test2> timer2;
+            Timer<Test2> timer3;
+    };
+}
+
+#endif
Index: code/branches/input/src/asylum/orxonox/objects/test3.cc
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/test3.cc	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/test3.cc	(revision 944)
@@ -0,0 +1,116 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "test1.h"
+#include "test2.h"
+#include "test3.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    CreateFactory(Test3);
+
+    Test3::Test3()
+    {
+        RegisterObject(Test3);
+
+        this->setConfigValues();
+    }
+
+    void Test3::setConfigValues()
+    {
+        SetConfigValue(value_int_, 1);
+        SetConfigValue(value_uint_, 1);
+        SetConfigValue(value_char_, 1);
+        SetConfigValue(value_uchar_, 1);
+        SetConfigValue(value_float_, 1);
+        SetConfigValue(value_double_, 1);
+        SetConfigValue(value_bool_, 1);
+        SetConfigValue(value_string_, "This is a test");
+        SetConfigValue(value_constchar_, "This is another test");
+        SetConfigValue(value_vector2_, Vector2(101, 202));
+        SetConfigValue(value_vector3_, Vector3(13, 26, 39));
+        SetConfigValue(value_colourvalue_, ColourValue(1.0, 0.5, 0.25, 0.887));
+    }
+
+    Test3::~Test3()
+    {
+    }
+
+    void Test3::configOutput()
+    {
+        std::cout << "int:         " << this->value_int_ << std::endl;
+        std::cout << "uint:        " << this->value_uint_ << std::endl;
+        std::cout << "char:        " << (int)this->value_char_ << std::endl;
+        std::cout << "uchar:       " << (int)this->value_uchar_ << std::endl;
+        std::cout << "float:       " << this->value_float_ << std::endl;
+        std::cout << "double:      " << this->value_double_ << std::endl;
+        std::cout << "bool:        " << this->value_bool_ << std::endl;
+        std::cout << "string:      " << this->value_string_ << std::endl;
+        std::cout << "constchar:   " << this->value_constchar_ << std::endl;
+        std::cout << "vector2:     " << this->value_vector2_ << std::endl;
+        std::cout << "vector3:     " << this->value_vector3_ << std::endl;
+        std::cout << "colourvalue: " << this->value_colourvalue_ << std::endl;
+    }
+
+    #define testandcout(code) \
+      std::cout << #code << " " << code << std::endl
+
+    void Test3::usefullClassesIsATest(Test1* test1)
+    {
+        std::cout << std::endl;
+        std::cout << "Test1:" << std::endl;
+        testandcout(test1->usefullClass1isA(Class(Test1)));
+        testandcout(test1->usefullClass1isA(Class(Test2)));
+        testandcout(test1->usefullClass1isA(Class(Test3)));
+        std::cout << std::endl;
+        testandcout(test1->usefullClass2isA(Class(Test1)));
+        testandcout(test1->usefullClass2isA(Class(Test2)));
+        testandcout(test1->usefullClass2isA(Class(Test3)));
+        std::cout << std::endl;
+        testandcout(test1->usefullClass3isA(Class(Test1)));
+        testandcout(test1->usefullClass3isA(Class(Test2)));
+        testandcout(test1->usefullClass3isA(Class(Test3)));
+    }
+
+    void Test3::usefullClassesIsATest(Test2* test2)
+    {
+        std::cout << std::endl;
+        std::cout << "Test2:" << std::endl;
+        testandcout(test2->usefullClass1isA(Class(Test1)));
+        testandcout(test2->usefullClass1isA(Class(Test2)));
+        testandcout(test2->usefullClass1isA(Class(Test3)));
+        std::cout << std::endl;
+        testandcout(test2->usefullClass2isA(Class(Test1)));
+        testandcout(test2->usefullClass2isA(Class(Test2)));
+        testandcout(test2->usefullClass2isA(Class(Test3)));
+        std::cout << std::endl;
+        testandcout(test2->usefullClass3isA(Class(Test1)));
+        testandcout(test2->usefullClass3isA(Class(Test2)));
+        testandcout(test2->usefullClass3isA(Class(Test3)));
+    }
+}
Index: code/branches/input/src/asylum/orxonox/objects/test3.h
===================================================================
--- code/branches/input/src/asylum/orxonox/objects/test3.h	(revision 944)
+++ code/branches/input/src/asylum/orxonox/objects/test3.h	(revision 944)
@@ -0,0 +1,41 @@
+#ifndef _Test3_H__
+#define _Test3_H__
+
+#include "core/BaseObject.h"
+#include "util/Math.h"
+
+namespace orxonox
+{
+    class Test1;
+    class Test2;
+
+    class Test3 : public BaseObject
+    {
+        public:
+            Test3();
+            virtual ~Test3();
+
+            void setConfigValues();
+
+            void usefullClassesIsATest(Test1* test1);
+            void usefullClassesIsATest(Test2* test2);
+
+            void configOutput();
+
+        private:
+            int                 value_int_;
+            unsigned int        value_uint_;
+            char                value_char_;
+            unsigned char       value_uchar_;
+            float               value_float_;
+            double              value_double_;
+            bool                value_bool_;
+            std::string         value_string_;
+            const char*         value_constchar_;
+            Vector2             value_vector2_;
+            Vector3             value_vector3_;
+            ColourValue         value_colourvalue_;
+    };
+}
+
+#endif
Index: code/branches/input/src/audio/_AudioObject.cc
===================================================================
--- code/branches/input/src/audio/_AudioObject.cc	(revision 943)
+++ 	(revision )
@@ -1,142 +1,0 @@
-/*
-*   ORXONOX - the hottest 3D action shooter ever to exist
-*
-*
-*   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:
-*      ...
-*   Co-authors:
-*      ...
-*
-*/
-
-
-#include <iostream>
-#include <string>
-
-#include "core/Debug.h"
-#include "AudioObject.h"
-
-namespace audio
-{
-  AudioObject::AudioObject(std::string audioFile)
-  {
-    audioFile_ = audioFile;
-    SourcePos[0]=0;
-    SourcePos[1]=0;
-    SourcePos[2]=0;
-
-    SourceVel[0]=0;
-    SourceVel[1]=0;
-    SourceVel[2]=0;
-
-    ListenerPos[0]=0;
-    ListenerPos[1]=0;
-    ListenerPos[2]=0;
-
-    ListenerVel[0]=0;
-    ListenerVel[1]=0;
-    ListenerVel[2]=0;
-
-    ListenerOri[0]=0;
-    ListenerOri[1]=0;
-    ListenerOri[2]=-1;
-    ListenerOri[3]=0;
-    ListenerOri[4]=1;
-    ListenerOri[5]=0;
-
-
-    // Initialize OpenAL and clear the error bit.
-
-    alutInit(NULL, 0);
-    alGetError();
-
-    // Load the wav data.
-
-    if(LoadALData() == AL_FALSE)
-    {
-      printf("Error loading sound data.");
-
-    }
-
-    SetListenerValues();
-    COUT(3) << "Info: Play sone ambient background sound";
-  }
-
-  AudioObject::~AudioObject()
-  {
-    KillALData();
-  }
-
-  ALboolean AudioObject::LoadALData()
-  {
-    ALenum format;
-    ALsizei size;
-    ALvoid* data;
-    ALsizei freq;
-    ALboolean loop;
-
-
-    alGenBuffers(1, &Buffer);
-
-    if(alGetError() != AL_NO_ERROR)
-      return AL_FALSE;
-
-    alutLoadWAVFile((ALbyte*)audioFile_.c_str(), &format, &data, &size, &freq, &loop);
-    alBufferData(Buffer, format, data, size, freq);
-    alutUnloadWAV(format, data, size, freq);
-
-    alGenSources(1, &Source);
-
-    if(alGetError() != AL_NO_ERROR)
-      return AL_FALSE;
-
-    alSourcei (Source, AL_BUFFER,   Buffer   );
-    alSourcef (Source, AL_PITCH,    1.0      );
-    alSourcef (Source, AL_GAIN,     1.0      );
-    alSourcefv(Source, AL_POSITION, SourcePos);
-    alSourcefv(Source, AL_VELOCITY, SourceVel);
-    alSourcei (Source, AL_LOOPING,  loop     );
-
-    if(alGetError() == AL_NO_ERROR)
-      return AL_TRUE;
-
-
-    return AL_FALSE;
-  }
-
-  void AudioObject::SetListenerValues()
-  {
-    alListenerfv(AL_POSITION,    ListenerPos);
-    alListenerfv(AL_VELOCITY,    ListenerVel);
-    alListenerfv(AL_ORIENTATION, ListenerOri);
-  }
-
-  void AudioObject::KillALData()
-  {
-    alDeleteBuffers(1, &Buffer);
-    alDeleteSources(1, &Source);
-    alutExit();
-  }
-
-  void AudioObject::play()
-  {
-    alSourcePlay(Source);
-  }
-
-}
Index: code/branches/input/src/network/PacketBufferTestExt.cc
===================================================================
--- code/branches/input/src/network/PacketBufferTestExt.cc	(revision 943)
+++ 	(revision )
@@ -1,81 +1,0 @@
-/*
-*   ORXONOX - the hottest 3D action shooter ever to exist
-*
-*
-*   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:
-*      ...
-*   Co-authors:
-*      ...
-*
-*/
-
-#include <string>
-#include <iostream>
-#include <enet/enet.h>
-#include <boost/thread/thread.hpp>
-
-#include "util/Sleep.h"
-#include "PacketBuffer.h"
-#include "PacketBuffer.cc"
-
-using namespace network;
-
-void write(PacketBuffer *test){
-  ENetEvent event;
-  ENetPacket *packet;
-  if(test->isEmpty())
-    std::cout << "empty buffer" << std::endl;
-  for(int i=0; i<10; i++){
-    std::string temp = "packet ";
-    packet = enet_packet_create("packet", strlen("packet ")+1,
-      ENET_PACKET_FLAG_RELIABLE);
-    std::cout << i << ": pushing " << packet->data << std::endl;
-    event.packet=packet;
-    test->push(&event);
-    if(i==5)
-      usleep(200000);
-  }
-  test->setClosed(true);
-  return;
-}
-
-void read(PacketBuffer *test){
-  //test->print();
-  // exit if the queue is closed and empty
-  while(!test->isClosed() || !test->isEmpty()){
-    // only pop if the queue isn't empty
-    while(!test->isEmpty()){
-      std::cout << "We popped the value " << test->pop()->data << std::endl;
-    }
-  }
-  return;
-}
-
-
-int main(int argc, char **argv[]){
-  PacketBuffer test = PacketBuffer();
-  boost::thread thrd1(boost::bind(&write, &test));
-  boost::thread thrd2(boost::bind(&read, &test));
-
-  thrd1.join();
-  thrd2.join();
-
-  return 0;
-}
-
Index: code/branches/input/src/orxonox/AIClass.h
===================================================================
--- code/branches/input/src/orxonox/AIClass.h	(revision 943)
+++ 	(revision )
@@ -1,95 +1,0 @@
-#ifndef _AIClass_H__
-#define _AIClass_H__
-
-#include "util/Vector3.h"
-
-namespace orxonox
-{
-  class AIPilot
-  {
-
-
-    /*
-    TASKS:                                                                         Requirements:
-
-    - Change actual Speed to required Speed                                          - Speed as Vector3 , spaceship(?) -> pilot attached to it or vice versa (?)
-    - Open fire, if allowed                                                          - Status of the fleet commander -> allowed to fire , fly etc.
-    - differ friend, ally and enemy                                                  - Lists of ships + who controls them
-    - report ship status to fleet commander                                          - Call own ship status -> ammo, damage etc.
-
-
-
-    */
-
-  public:
-    Vector3 speed;
-
-
-
-    //default constructor
-    AIPilot() {
-      speed = (1,0,0);
-    }
-
-    Vector3 steer(Vector3 reqSpeed) {
-      Quaternion sRotation = speed.getRotationTo(reqSpeed);
-      Radian rollarc = sRotation.getRoll();
-      Radian pitcharc = sRotation.getPitch();
-      Radian yawarc = sRotation.getYaw();
-      return Vector3((float)rollarc.valueRadians(), (float)pitcharc.valueRadians(), (float)yawarc.valueRadians());
-    }
-
-
-  };
-
-  class AIFleetCommander : public  AIPilot {
-
-
-    /*
-    TASKS:                                                                       Requirements:
-
-    - Same tasks as AI_Pilot (only if shipcontrol)                                   - Same as AI_Pilot
-    - Calculate required Speed for any ship in Fleet                                 - Knows all calculation functions
-    - Request fleet status and report to commander                                   - Better list of all ships -> more data for fleet ships
-
-
-
-    */
-
-  public:
-
-
-    //default constructor
-    AIFleetCommander() {
-
-    }
-
-
-
-  };
-
-  class AICommander : public  AIFleetCommander
-  {
-
-
-    /*
-    TASKS:                                                                     Requirements:
-
-    - Decide on general tactics                                                      - List of general fleet status + all possible information on enemies
-    - Save and load tactical data (?)                                                - files with tactical data, e.g. success of strategy etc.
-
-
-
-    */
-
-    //default constructor
-    AICommander() {
-
-    }
-
-
-  };
-
-}
-
-#endif /* _AIClass_H__ */
Index: code/branches/input/src/orxonox/Arrival.h
===================================================================
--- code/branches/input/src/orxonox/Arrival.h	(revision 943)
+++ 	(revision )
@@ -1,82 +1,0 @@
-
-// Arrival Class
-
-
-#ifndef _Arrival_H__
-#define _Arrival_H__
-
-#include "util/Math.h"
-
-namespace orxonox
-{
-  class Arrival
-  {
-  public:
-    Vector3 location;           //!< locationvector of the element
-    Vector3 speed;              //!< speedvector of the element
-    Vector3 acceleration;       //!< accelerationvector of the element
-    Vector3 target;             //!< target to arrive
-    int accelerationForwards;   //!< from steering-interface
-    int MaxSpeed;               //!< from steering-interface
-
-
-    Arrival() {
-      acceleration = (0,0,0);
-      speed = (0,0,0);
-      location = (0,0,0);
-      target = (0,0,0);
-    }
-
-    Arrival(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
-      acceleration = acceleration_;
-      speed = speed_;
-      location = location_;
-      target = target_;
-    }
-
-    void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
-      acceleration = acceleration_;
-      speed = speed_;
-      location = location_;
-      target = target_;
-    }
-
-    void setTarget(Vector3 target_) {
-      setValues(this->location, this->speed, this->acceleration, target_);
-    }
-
-    Vector3 getDirection() {
-      Vector3 direction = target-location;
-    }
-
-    double relativeDirectApproach() {
-      // Maxspeed / accelerationForwards = time needed to break with max acceleration
-      // 2*getDistance()length/(MaxSpeed/accelerationForwards)^2 = required acceleration to arrive at the target with speed = 0
-      return (accelerationForwards / (2*getDirection().length() / ((MaxSpeed/accelerationForwards)*(MaxSpeed/accelerationForwards))) );
-    }
-
-    void Approach() {
-      Quaternion rotation = Quaternion(0,0,0,0);
-      if (relativeDirectApproach() > 1)
-      {
-        float length = speed.length();
-        speed = (speed+getDirection());
-        speed.normalise();
-        speed = speed*length;
-        if (relativeDirectApproach() > 4)
-        {
-          //accelerate
-        }
-        else
-        {
-          // speed will stay constant
-        }
-      }
-      else {
-      }
-    }
-
-  };
-}
-
-#endif /* _Arrival_H__ */
Index: code/branches/input/src/orxonox/Flocking.h
===================================================================
--- code/branches/input/src/orxonox/Flocking.h	(revision 943)
+++ 	(revision )
@@ -1,140 +1,0 @@
-
-//Headerfile: Flocking.h
-
-#ifndef _Flocking_H__
-#define _Flocking_H__
-
-#include "util/Math.h"
-
-namespace orxonox
-{
-  class Element // An element that flocks
-  {
-
-  public:
-    Vector3 location;                       //!< locationvector of the element
-    Vector3 speed;                          //!< speedvector of the element
-    Vector3 acceleration;                   //!< accelerationvector of the element
-    bool movable;                                 //!< movability of the element, (false) gives the possiblity that an object can`t be moved by flocking but still gets into the calculation
-    static int const SEPERATIONDISTANCE = 300;    //!< detectionradius of seperation
-    static int const ALIGNMENTDISTANCE = 300;     //!< detectionradius of alignment
-    static int const COHESIONDISTANCE = 5000;     //!< detectionradius of cohesion
-    static int const ANZELEMENTS = 9;             //!< number of elements
-
-    //! default constructor
-    Element() {
-      acceleration = Vector3(0,0,0);
-      speed = Vector3(0,0,0);
-      location = Vector3(0,0,0);
-      movable = true;
-    }
-
-    /** constructor
-    *  @param location_ sets locationvector of the element
-    *  @param speed_ sets speedvector of the element
-    *  @param acceleration_ sets accelerationvector of the element
-    *  @param movable_ sets movability of the element
-    */
-    Element(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) {
-      acceleration = acceleration_;
-      speed = speed_;
-      location = location_;
-      movable = movable_;
-    }
-
-    //! function to chance values of an element
-    void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) {
-      acceleration = acceleration_;
-      speed = speed_;
-      location = location_;
-      movable = movable_;
-    }
-
-    /** calculates the distance between the element and an other point given by temp
-    * @param e remote object to calculate distance to
-    */
-    float getDistance(Element e) {
-      Vector3 distance = e.location - location;
-      return distance.length();
-    }
-
-    //! updates the data of an element
-    void update(Element arrayOfElements[]) {
-      if (this->movable == true) {calculateAcceleration(arrayOfElements);} //if element is movable, calculate acceleration
-    }
-
-    //! calculates the new acceleration of an element
-    void calculateAcceleration(Element arrayOfElements[]) {
-      acceleration = separation(arrayOfElements) + alignment(arrayOfElements) + cohesion(arrayOfElements);  //acceleration consisting of flocking-functions
-    }
-
-    //! separation-function (keep elements separated, avoid crashs)
-    Vector3 separation(Element arrayOfElements[]) {
-      using namespace Ogre;
-      Vector3 steering = Vector3(0,0,0); //steeringvector
-      Vector3 inverseDistance = Vector3(0,0,0);  //vector pointing away from possible collisions
-      int numberOfNeighbour = 0;  //number of observed neighbours
-      float distance = 0;  // distance to the actual element
-      for(int i=0; i<ANZELEMENTS; i++) {  //go through all elements
-        Element actual = arrayOfElements[i];  //get the actual element
-        distance = getDistance(actual);  //get distance between this and actual
-        if ((distance > 0) && (distance < SEPERATIONDISTANCE)) {  //do only if actual is inside detectionradius
-          inverseDistance = (0,0,0);
-          inverseDistance = location-actual.location;  //calculate the distancevector heading towards this
-          //adaptation of the inverseDistance to the distance
-          if ((distance < 200) && (distance >= 120)) {inverseDistance = 2*inverseDistance;}
-          if ((distance < 120) && (distance >= 80)) {inverseDistance = 5*inverseDistance;}
-          if ((distance < 80) && (distance >= 40)) {inverseDistance = 10*inverseDistance;}
-          if ((distance < 40) && (distance > 0)) {inverseDistance = 10*inverseDistance;}
-          steering = steering + inverseDistance;  //add up all significant steeringvectors
-          numberOfNeighbour++;  //counts the elements inside the detectionradius
-        }
-      }
-      if(numberOfNeighbour > 0) { steering = steering / (float)numberOfNeighbour; }  //devide the sum of steeringvectors by the number of elements -> separation steeringvector
-      return steering;
-    }
-
-    //! alignment-function (lead elements to the same heading)
-    Vector3 alignment(Element arrayOfElements[]) {
-      using namespace Ogre;
-      Vector3 steering = Vector3(0,0,0); //steeringvector
-      int numberOfNeighbour = 0;  //number of observed neighbours
-      float distance = 0;
-      //go through all elements
-      for(int i=0; i<ANZELEMENTS; i++) {  //just working with 3 elements at the moment
-        Element actual = arrayOfElements[i];  //get the actual element
-        float distance = getDistance(actual);  //get distance between this and actual
-        if ((distance > 0) && (distance < ALIGNMENTDISTANCE)) {  //check if actual element is inside detectionradius
-          steering = steering + actual.speed;  //add up all speedvectors inside the detectionradius
-          numberOfNeighbour++;  //counts the elements inside the detectionradius
-        }
-      }
-      if(numberOfNeighbour > 0) { steering = steering / (float)numberOfNeighbour; }  //devide the sum of steeringvectors by the number of elements -> alignment steeringvector
-      return steering;
-    }
-
-    //! cohseion-function (keep elements close to each other)
-    Vector3 cohesion(Element arrayOfElements[]) {
-      using namespace Ogre;
-      Vector3 steering = Vector3(0,0,0); //steeringvector
-      int numberOfNeighbour = 0;  //number of observed neighbours
-      float distance = 0;
-      //go through all elements
-      for(int i=0; i<ANZELEMENTS; i++) {  //just working with 3 elements at the moment
-        Element actual = arrayOfElements[i];  //get the actual element
-        float distance = getDistance(actual);  //get distance between this and actual
-        if ((distance > 0) && (distance < COHESIONDISTANCE)) {  //check if actual element is inside detectionradius
-          steering = steering + actual.location;  //add up all locations of elements inside the detectionradius
-          numberOfNeighbour++;  //counts the elements inside the detectionradius
-        }
-      }
-      if(numberOfNeighbour > 0) {
-        steering = steering  / (float)numberOfNeighbour;  //devide the sum steeringvector by the number of elements -> cohesion steeringvector
-        steering = steering - this->location;  //transform the vector for the ship
-      }
-      return steering;
-    }
-  };     //End of class Element
-}
-
-#endif /* _Flocking_H__*/
Index: code/branches/input/src/orxonox/InputHandler.cc
===================================================================
--- code/branches/input/src/orxonox/InputHandler.cc	(revision 943)
+++ code/branches/input/src/orxonox/InputHandler.cc	(revision 944)
@@ -123,5 +123,5 @@
       {
         // something went wrong with the initialisation
-        COUT(ORX_ERROR) << "Error: Failed creating an input system. Message: \"" << ex.eText << "\"" << std::endl;
+        COUT(ORX_ERROR) << "Error: Failed creating an input system/keyboard/mouse. Message: \"" << ex.eText << "\"" << std::endl;
         this->inputSystem_ = 0;
         return false;
Index: code/branches/input/src/orxonox/InputManager.cc
===================================================================
--- code/branches/input/src/orxonox/InputManager.cc	(revision 943)
+++ 	(revision )
@@ -1,390 +1,0 @@
-#include "OrxonoxStableHeaders.h"
-
-#include "InputManager.h"
-
-InputManager *InputManager::mInputManager;
-
-InputManager::InputManager( void ) :
-    mMouse( 0 ), mKeyboard( 0 ), mInputSystem( 0 ) {}
-
-InputManager::~InputManager( void ) {
-  if( mInputSystem ) {
-    if( mMouse ) {
-      mInputSystem->destroyInputObject( mMouse );
-      mMouse = 0;
-    }
-
-    if( mKeyboard ) {
-      mInputSystem->destroyInputObject( mKeyboard );
-      mKeyboard = 0;
-    }
-
-    if( mJoysticks.size() > 0 ) {
-      itJoystick    = mJoysticks.begin();
-      itJoystickEnd = mJoysticks.end();
-      for(; itJoystick != itJoystickEnd; ++itJoystick ) {
-        mInputSystem->destroyInputObject( *itJoystick );
-      }
-
-      mJoysticks.clear();
-    }
-
-        // If you use OIS1.0RC1 or above, uncomment this line
-        // and comment the line below it
-    mInputSystem->destroyInputSystem( mInputSystem );
-        //mInputSystem->destroyInputSystem();
-    mInputSystem = 0;
-
-        // Clear Listeners
-    mKeyListeners.clear();
-    mMouseListeners.clear();
-    mJoystickListeners.clear();
-  }
-}
-
-void InputManager::initialise( Ogre::RenderWindow *renderWindow ) {
-  if( !mInputSystem ) {
-        // Setup basic variables
-    OIS::ParamList paramList;
-    size_t windowHnd = 0;
-    std::ostringstream windowHndStr;
-
-        // Get window handle
-    renderWindow->getCustomAttribute( "WINDOW", &windowHnd );
-
-        // Fill parameter list
-    windowHndStr << (unsigned int) windowHnd;
-    paramList.insert( std::make_pair( std::string( "WINDOW" ), windowHndStr.str() ) );
-
-        // Create inputsystem
-    mInputSystem = OIS::InputManager::createInputSystem( paramList );
-
-        // If possible create a buffered keyboard
-        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISKeyboard) > 0) {
-      if( mInputSystem->numKeyboards() > 0 ) {
-//     if (mInputSystem->getNumberOfDevices(OIS::OISKeyboard) > 0) {
-      mKeyboard = static_cast<OIS::Keyboard*>( mInputSystem->createInputObject( OIS::OISKeyboard, true ) );
-      mKeyboard->setEventCallback( this );
-    }
-
-        // If possible create a buffered mouse
-        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISMouse) > 0) {
-      if( mInputSystem->numMice() > 0 ) {
-//     if (mInputSystem->getNumberOfDevices(OIS::OISMouse) > 0) {
-      mMouse = static_cast<OIS::Mouse*>( mInputSystem->createInputObject( OIS::OISMouse, true ) );
-      mMouse->setEventCallback( this );
-
-            // Get window size
-      unsigned int width, height, depth;
-      int left, top;
-      renderWindow->getMetrics( width, height, depth, left, top );
-
-            // Set mouse region
-      this->setWindowExtents( width, height );
-    }
-
-        // If possible create all joysticks in buffered mode
-        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISJoyStick) > 0) {
-    if( mInputSystem->numJoySticks() > 0 ) {
-//     if (mInputSystem->getNumberOfDevices(OIS::OISJoyStick) > 0) {
-       mJoysticks.resize( mInputSystem->numJoySticks() );
-//       mJoysticks.resize( mInputSystem->getNumberOfDevices(OIS::OISJoyStick) );
-
-      itJoystick    = mJoysticks.begin();
-      itJoystickEnd = mJoysticks.end();
-      for(; itJoystick != itJoystickEnd; ++itJoystick ) {
-        (*itJoystick) = static_cast<OIS::JoyStick*>( mInputSystem->createInputObject( OIS::OISJoyStick, true ) );
-        (*itJoystick)->setEventCallback( this );
-      }
-    }
-  }
-}
-
-void InputManager::capture( void ) {
-    // Need to capture / update each device every frame
-  if( mMouse ) {
-    mMouse->capture();
-  }
-
-  if( mKeyboard ) {
-    mKeyboard->capture();
-  }
-
-  if( mJoysticks.size() > 0 ) {
-    itJoystick    = mJoysticks.begin();
-    itJoystickEnd = mJoysticks.end();
-    for(; itJoystick != itJoystickEnd; ++itJoystick ) {
-      (*itJoystick)->capture();
-    }
-  }
-}
-
-void InputManager::addKeyListener( OIS::KeyListener *keyListener, const std::string& instanceName ) {
-  if( mKeyboard ) {
-        // Check for duplicate items
-    itKeyListener = mKeyListeners.find( instanceName );
-    if( itKeyListener == mKeyListeners.end() ) {
-      mKeyListeners[ instanceName ] = keyListener;
-    }
-    else {
-            // Duplicate Item
-    }
-  }
-}
-
-void InputManager::addMouseListener( OIS::MouseListener *mouseListener, const std::string& instanceName ) {
-  if( mMouse ) {
-        // Check for duplicate items
-    itMouseListener = mMouseListeners.find( instanceName );
-    if( itMouseListener == mMouseListeners.end() ) {
-      mMouseListeners[ instanceName ] = mouseListener;
-    }
-    else {
-            // Duplicate Item
-    }
-  }
-}
-
-void InputManager::addJoystickListener( OIS::JoyStickListener *joystickListener, const std::string& instanceName ) {
-  if( mJoysticks.size() > 0 ) {
-        // Check for duplicate items
-    itJoystickListener = mJoystickListeners.find( instanceName );
-    if( itJoystickListener == mJoystickListeners.end() ) {
-      mJoystickListeners[ instanceName ] = joystickListener;
-    }
-    else {
-            // Duplicate Item
-    }
-  }
-}
-
-void InputManager::removeKeyListener( const std::string& instanceName ) {
-    // Check if item exists
-  itKeyListener = mKeyListeners.find( instanceName );
-  if( itKeyListener != mKeyListeners.end() ) {
-    mKeyListeners.erase( itKeyListener );
-  }
-  else {
-        // Doesn't Exist
-  }
-}
-
-void InputManager::removeMouseListener( const std::string& instanceName ) {
-    // Check if item exists
-  itMouseListener = mMouseListeners.find( instanceName );
-  if( itMouseListener != mMouseListeners.end() ) {
-    mMouseListeners.erase( itMouseListener );
-  }
-  else {
-        // Doesn't Exist
-  }
-}
-
-void InputManager::removeJoystickListener( const std::string& instanceName ) {
-    // Check if item exists
-  itJoystickListener = mJoystickListeners.find( instanceName );
-  if( itJoystickListener != mJoystickListeners.end() ) {
-    mJoystickListeners.erase( itJoystickListener );
-  }
-  else {
-        // Doesn't Exist
-  }
-}
-
-void InputManager::removeKeyListener( OIS::KeyListener *keyListener ) {
-  itKeyListener    = mKeyListeners.begin();
-  itKeyListenerEnd = mKeyListeners.end();
-  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
-    if( itKeyListener->second == keyListener ) {
-      mKeyListeners.erase( itKeyListener );
-      break;
-    }
-  }
-}
-
-void InputManager::removeMouseListener( OIS::MouseListener *mouseListener ) {
-  itMouseListener    = mMouseListeners.begin();
-  itMouseListenerEnd = mMouseListeners.end();
-  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
-    if( itMouseListener->second == mouseListener ) {
-      mMouseListeners.erase( itMouseListener );
-      break;
-    }
-  }
-}
-
-void InputManager::removeJoystickListener( OIS::JoyStickListener *joystickListener ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if( itJoystickListener->second == joystickListener ) {
-      mJoystickListeners.erase( itJoystickListener );
-      break;
-    }
-  }
-}
-
-void InputManager::removeAllListeners( void ) {
-  mKeyListeners.clear();
-  mMouseListeners.clear();
-  mJoystickListeners.clear();
-}
-
-void InputManager::removeAllKeyListeners( void ) {
-  mKeyListeners.clear();
-}
-
-void InputManager::removeAllMouseListeners( void ) {
-  mMouseListeners.clear();
-}
-
-void InputManager::removeAllJoystickListeners( void ) {
-  mJoystickListeners.clear();
-}
-
-void InputManager::setWindowExtents( int width, int height ) {
-    // Set mouse region (if window resizes, we should alter this to reflect as well)
-  const OIS::MouseState &mouseState = mMouse->getMouseState();
-  mouseState.width  = width;
-  mouseState.height = height;
-}
-
-OIS::Mouse* InputManager::getMouse( void ) {
-  return mMouse;
-}
-
-OIS::Keyboard* InputManager::getKeyboard( void ) {
-  return mKeyboard;
-}
-
-OIS::JoyStick* InputManager::getJoystick( unsigned int index ) {
-    // Make sure it's a valid index
-  if( index < mJoysticks.size() ) {
-    return mJoysticks[ index ];
-  }
-
-  return 0;
-}
-
-int InputManager::getNumOfJoysticks( void ) {
-    // Cast to keep compiler happy ^^
-  return (int) mJoysticks.size();
-}
-
-bool InputManager::keyPressed( const OIS::KeyEvent &e ) {
-  itKeyListener    = mKeyListeners.begin();
-  itKeyListenerEnd = mKeyListeners.end();
-  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
-    if(!itKeyListener->second->keyPressed( e ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::keyReleased( const OIS::KeyEvent &e ) {
-  itKeyListener    = mKeyListeners.begin();
-  itKeyListenerEnd = mKeyListeners.end();
-  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
-    if(!itKeyListener->second->keyReleased( e ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::mouseMoved( const OIS::MouseEvent &e ) {
-  itMouseListener    = mMouseListeners.begin();
-  itMouseListenerEnd = mMouseListeners.end();
-  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
-    if(!itMouseListener->second->mouseMoved( e ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
-  itMouseListener    = mMouseListeners.begin();
-  itMouseListenerEnd = mMouseListeners.end();
-  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
-    if(!itMouseListener->second->mousePressed( e, id ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
-  itMouseListener    = mMouseListeners.begin();
-  itMouseListenerEnd = mMouseListeners.end();
-  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
-    if(!itMouseListener->second->mouseReleased( e, id ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::povMoved( const OIS::JoyStickEvent &e, int pov ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->povMoved( e, pov ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::axisMoved( const OIS::JoyStickEvent &e, int axis ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->axisMoved( e, axis ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::sliderMoved( const OIS::JoyStickEvent &e, int sliderID ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->sliderMoved( e, sliderID ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::buttonPressed( const OIS::JoyStickEvent &e, int button ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->buttonPressed( e, button ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::buttonReleased( const OIS::JoyStickEvent &e, int button ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->buttonReleased( e, button ))
-      break;
-  }
-
-  return true;
-}
-
-InputManager* InputManager::getSingletonPtr( void ) {
-  if( !mInputManager ) {
-    mInputManager = new InputManager();
-  }
-
-  return mInputManager;
-}
Index: code/branches/input/src/orxonox/InputManager.h
===================================================================
--- code/branches/input/src/orxonox/InputManager.h	(revision 943)
+++ 	(revision )
@@ -1,93 +1,0 @@
-#ifndef _InputManager_H__
-#define _InputManager_H__
-
-#ifdef WIN32
-#include <OIS/OISMouse.h>
-#include <OIS/OISKeyboard.h>
-#include <OIS/OISJoyStick.h>
-#include <OIS/OISInputManager.h>
-#else
-#include <OISMouse.h>
-#include <OISKeyboard.h>
-#include <OISJoyStick.h>
-#include <OISInputManager.h>
-#endif
-
-#include <OgreRenderWindow.h>
-
-#include "OrxonoxPrereqs.h"
-
-class _OrxonoxExport InputManager : public OIS::KeyListener, public OIS::MouseListener, public OIS::JoyStickListener {
-  public:
-    virtual ~InputManager( void );
-
-    void initialise( Ogre::RenderWindow *renderWindow );
-    void capture( void );
-
-    void addKeyListener( OIS::KeyListener *keyListener, const std::string& instanceName );
-    void addMouseListener( OIS::MouseListener *mouseListener, const std::string& instanceName );
-    void addJoystickListener( OIS::JoyStickListener *joystickListener, const std::string& instanceName );
-
-    void removeKeyListener( const std::string& instanceName );
-    void removeMouseListener( const std::string& instanceName );
-    void removeJoystickListener( const std::string& instanceName );
-
-    void removeKeyListener( OIS::KeyListener *keyListener );
-    void removeMouseListener( OIS::MouseListener *mouseListener );
-    void removeJoystickListener( OIS::JoyStickListener *joystickListener );
-
-    void removeAllListeners( void );
-    void removeAllKeyListeners( void );
-    void removeAllMouseListeners( void );
-    void removeAllJoystickListeners( void );
-
-    void setWindowExtents( int width, int height );
-
-    OIS::Mouse*    getMouse( void );
-    OIS::Keyboard* getKeyboard( void );
-    OIS::JoyStick* getJoystick( unsigned int index );
-
-    int getNumOfJoysticks( void );
-
-    static InputManager* getSingletonPtr( void );
-  private:
-    InputManager( void );
-    InputManager( const InputManager& ) { }
-    InputManager & operator = ( const InputManager& );
-
-    bool keyPressed( const OIS::KeyEvent &e );
-    bool keyReleased( const OIS::KeyEvent &e );
-
-    bool mouseMoved( const OIS::MouseEvent &e );
-    bool mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id );
-    bool mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id );
-
-    bool povMoved( const OIS::JoyStickEvent &e, int pov );
-    bool axisMoved( const OIS::JoyStickEvent &e, int axis );
-    bool sliderMoved( const OIS::JoyStickEvent &e, int sliderID );
-    bool buttonPressed( const OIS::JoyStickEvent &e, int button );
-    bool buttonReleased( const OIS::JoyStickEvent &e, int button );
-
-    OIS::Mouse        *mMouse;
-    OIS::Keyboard     *mKeyboard;
-    OIS::InputManager *mInputSystem;
-
-    std::vector<OIS::JoyStick*> mJoysticks;
-    std::vector<OIS::JoyStick*>::iterator itJoystick;
-    std::vector<OIS::JoyStick*>::iterator itJoystickEnd;
-
-    std::map<std::string, OIS::KeyListener*> mKeyListeners;
-    std::map<std::string, OIS::MouseListener*> mMouseListeners;
-    std::map<std::string, OIS::JoyStickListener*> mJoystickListeners;
-
-    std::map<std::string, OIS::KeyListener*>::iterator itKeyListener;
-    std::map<std::string, OIS::MouseListener*>::iterator itMouseListener;
-    std::map<std::string, OIS::JoyStickListener*>::iterator itJoystickListener;
-
-    std::map<std::string, OIS::KeyListener*>::iterator itKeyListenerEnd;
-    std::map<std::string, OIS::MouseListener*>::iterator itMouseListenerEnd;
-    std::map<std::string, OIS::JoyStickListener*>::iterator itJoystickListenerEnd;
-
-    static InputManager *mInputManager;
-};
-#endif /* _InputManager_H__ */
Index: code/branches/input/src/orxonox/SpaceshipSteering.cc
===================================================================
--- code/branches/input/src/orxonox/SpaceshipSteering.cc	(revision 943)
+++ 	(revision )
@@ -1,233 +1,0 @@
-/*
-*   ORXONOX - the hottest 3D action shooter ever to exist
-*
-*
-*   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:
-*      ...
-*   Co-authors:
-*      ...
-*
-*/
-
-#include "OrxonoxStableHeaders.h"
-
-#include <OgreNode.h>
-#include <OgreSceneNode.h>
-
-#include "core/Debug.h"
-#include "util/Math.h"
-#include "SpaceshipSteering.h"
-
-namespace orxonox
-{
-
-  SpaceshipSteering::SpaceshipSteering(float maxSpeedForward, float
-    maxSpeedRotateUpDown, float maxSpeedRotateRightLeft, float
-    maxSpeedLoopRightLeft)
-  {
-
-      COUT(3) << "Info: Steering was loaded" << std::endl;
-      moveForward_ = 0;
-      rotateUp_ = 0;
-      rotateDown_ = 0;
-      rotateRight_ = 0;
-      rotateLeft_ = 0;
-      loopRight_ = 0;
-      loopLeft_ = 0;
-      brakeForward_ = 0;
-      brakeRotate_ = 0;
-      brakeLoop_ = 0;
-      speedForward_ = 0;
-      speedRotateUpDown_ = 0;
-      speedRotateRightLeft_ = 0;
-      speedLoopRightLeft_ = 0;
-      maxSpeedForward_ = maxSpeedForward;
-      maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
-      maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
-      maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
-      accelerationForward_ = 0;
-      accelerationRotateUpDown_ = 0;
-      accelerationRotateRightLeft_ = 0;
-      accelerationLoopRightLeft_ = 0;
-  }
-
-  void SpaceshipSteering::tick(float time)
-  {
-
-    if(moveForward_ > 0) {
-      accelerationForward_ = moveForward_;
-      if(speedForward_ < maxSpeedForward_)
-        speedForward_ += accelerationForward_*time;
-      if(speedForward_ > maxSpeedForward_)
-        speedForward_ = maxSpeedForward_;
-    }
-    if(moveForward_ <= 0) {
-      accelerationForward_ = brakeForward_;
-      if(speedForward_ > 0)
-        speedForward_ -= accelerationForward_*time;
-      if(speedForward_ < 0)
-        speedForward_ = 0;
-    }
-
-    if(rotateUp_ > 0) {
-      accelerationRotateUpDown_ = rotateUp_;
-      if(speedRotateUpDown_ < maxSpeedRotateUpDown_)
-        speedRotateUpDown_ += accelerationRotateUpDown_*time;
-      if(speedRotateUpDown_ > maxSpeedRotateUpDown_)
-        speedRotateUpDown_ = maxSpeedRotateUpDown_;
-    }
-    if(rotateDown_ > 0) {
-      accelerationRotateUpDown_ = rotateDown_;
-      if(speedRotateUpDown_ > -maxSpeedRotateUpDown_)
-        speedRotateUpDown_ -= accelerationRotateUpDown_*time;
-      if(speedRotateUpDown_ < -maxSpeedRotateUpDown_)
-        speedRotateUpDown_ = -maxSpeedRotateUpDown_;
-    }
-    if(rotateUp_ == 0 && rotateDown_ == 0) {
-      accelerationRotateUpDown_ = brakeRotate_;
-      if(speedRotateUpDown_ > 0)
-        speedRotateUpDown_ -= accelerationRotateUpDown_*time;
-      if(speedRotateUpDown_ < 0)
-        speedRotateUpDown_ += accelerationRotateUpDown_*time;
-      if(fabsf(speedRotateUpDown_)<accelerationRotateUpDown_*time)
-        speedRotateUpDown_ = 0;
-    }
-
-    if(rotateRight_ > 0) {
-      accelerationRotateRightLeft_ = rotateRight_;
-      if(speedRotateRightLeft_ > -maxSpeedRotateRightLeft_)
-        speedRotateRightLeft_ -= accelerationRotateRightLeft_*time;
-      if(speedRotateRightLeft_ < -maxSpeedRotateRightLeft_)
-        speedRotateRightLeft_ = -maxSpeedRotateRightLeft_;
-    }
-    if(rotateLeft_ > 0) {
-      accelerationRotateRightLeft_ = rotateLeft_;
-      if(speedRotateRightLeft_ < maxSpeedRotateRightLeft_)
-        speedRotateRightLeft_ += accelerationRotateRightLeft_*time;
-      if(speedRotateRightLeft_ > maxSpeedRotateRightLeft_)
-        speedRotateRightLeft_ = maxSpeedRotateRightLeft_;
-    }
-    if(rotateRight_ == 0 && rotateLeft_ == 0) {
-      accelerationRotateRightLeft_ = brakeRotate_;
-      if(speedRotateRightLeft_ > 0)
-        speedRotateRightLeft_ -= accelerationRotateRightLeft_*time;
-      if(speedRotateRightLeft_ < 0)
-        speedRotateRightLeft_ += accelerationRotateRightLeft_*time;
-      if(fabsf(speedRotateRightLeft_)<accelerationRotateRightLeft_*time)
-        speedRotateRightLeft_ = 0;
-    }
-
-    if(loopRight_ > 0) {
-      accelerationLoopRightLeft_ = loopRight_;
-      if(speedLoopRightLeft_ < maxSpeedLoopRightLeft_)
-        speedLoopRightLeft_ += accelerationLoopRightLeft_*time;
-      if(speedLoopRightLeft_ > maxSpeedLoopRightLeft_)
-        speedLoopRightLeft_ = maxSpeedLoopRightLeft_;
-    }
-    if(loopLeft_ > 0) {
-      accelerationLoopRightLeft_ = loopLeft_;
-      if(speedLoopRightLeft_ > -maxSpeedLoopRightLeft_)
-        speedLoopRightLeft_ -= accelerationLoopRightLeft_*time;
-      if(speedLoopRightLeft_ < -maxSpeedLoopRightLeft_)
-        speedLoopRightLeft_ = -maxSpeedLoopRightLeft_;
-    }
-    if(loopLeft_ == 0 && loopRight_ == 0) {
-      accelerationLoopRightLeft_ = brakeLoop_;
-      if(speedLoopRightLeft_ > 0)
-        speedLoopRightLeft_ -= accelerationLoopRightLeft_*time;
-      if(speedLoopRightLeft_ < 0)
-        speedLoopRightLeft_ += accelerationLoopRightLeft_*time;
-      if(fabsf(speedLoopRightLeft_)<accelerationLoopRightLeft_*time)
-        speedLoopRightLeft_ = 0;
-    }
-
-    Vector3 transVector = Vector3::ZERO;
-    transVector.z = 1;
-    steeringNode_->translate(transVector*speedForward_*time,
-      Ogre::SceneNode::TS_LOCAL);
-    steeringNode_->pitch(Degree(speedRotateUpDown_*time),
-      Ogre::SceneNode::TS_LOCAL);
-    steeringNode_->yaw(Degree(speedRotateRightLeft_*time),
-      Ogre::SceneNode::TS_LOCAL);
-    steeringNode_->roll(Degree(speedLoopRightLeft_*time),
-      Ogre::SceneNode::TS_LOCAL);
-
-  }
-
-  void SpaceshipSteering::moveForward(float moveForward) {
-    moveForward_ = moveForward;
-  }
-
-  void SpaceshipSteering::rotateUp(float rotateUp) {
-    rotateUp_ = rotateUp;
-  }
-
-  void SpaceshipSteering::rotateDown(float rotateDown) {
-    rotateDown_ = rotateDown;
-  }
-
-  void SpaceshipSteering::rotateLeft(float rotateLeft) {
-    rotateLeft_ = rotateLeft;
-  }
-
-  void SpaceshipSteering::rotateRight(float rotateRight) {
-    rotateRight_ = rotateRight;
-  }
-
-  void SpaceshipSteering::loopLeft(float loopLeft) {
-    loopLeft_ = loopLeft;
-  }
-
-  void SpaceshipSteering::loopRight(float loopRight) {
-    loopRight_ = loopRight;
-  }
-
-  void SpaceshipSteering::brakeForward(float brakeForward) {
-    brakeForward_ = brakeForward;
-  }
-
-  void SpaceshipSteering::brakeRotate(float brakeRotate) {
-    brakeRotate_ = brakeRotate;
-  }
-
-  void SpaceshipSteering::brakeLoop(float brakeLoop) {
-    brakeLoop_ = brakeLoop;
-  }
-
-  void SpaceshipSteering::maxSpeedForward(float maxSpeedForward) {
-    maxSpeedForward_ = maxSpeedForward;
-  }
-
-  void SpaceshipSteering::maxSpeedRotateUpDown(float maxSpeedRotateUpDown) {
-    maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
-  }
-
-  void SpaceshipSteering::maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft) {
-    maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
-  }
-
-  void SpaceshipSteering::maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft) {
-    maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
-  }
-
-  void SpaceshipSteering::addNode(Ogre::SceneNode *steeringNode) {
-    steeringNode_ = steeringNode;
-  }
-
-}
Index: code/branches/input/src/orxonox/SpaceshipSteering.h
===================================================================
--- code/branches/input/src/orxonox/SpaceshipSteering.h	(revision 943)
+++ 	(revision )
@@ -1,66 +1,0 @@
-#ifndef _SpaceShipSteering_H__
-#define _SpaceShipSteering_H__
-
-#include <OgrePrerequisites.h>
-
-#include "OrxonoxPrereqs.h"
-
-namespace orxonox
-{
-  class _OrxonoxExport SpaceshipSteering
-  {
-  public:
-    SpaceshipSteering(float maxSpeedForward, float maxSpeedRotateUpDown,
-      float maxSpeedRotateRightLeft, float maxSpeedLoopRightLeft);
-    void tick(float time);
-    void moveForward(float moveForward);
-    void rotateUp(float rotateUp);
-    void rotateDown(float rotateDown);
-    void rotateRight(float rotateRight);
-    void rotateLeft(float rotateLeft);
-    void loopRight(float loopRight);
-    void loopLeft(float loopLeft);
-    void brakeForward(float brakeForward);
-    void brakeRotate(float brakeRotate);
-    void brakeLoop(float brakeLoop);
-    void maxSpeedForward(float maxSpeedForward);
-    void maxSpeedRotateUpDown(float maxSpeedRotateUpDown);
-    void maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft);
-    void maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft);
-    void addNode(Ogre::SceneNode *steeringNode);
-
-  protected:
-    Ogre::SceneNode *steeringNode_;
-
-  private:
-    float moveForward_;
-    float rotateUp_;
-    float rotateDown_;
-    float rotateRight_;
-    float rotateLeft_;
-    float loopRight_;
-    float loopLeft_;
-    float brakeForward_;
-    float brakeRotate_;
-    float brakeLoop_;
-
-    float speedForward_;
-    float speedRotateUpDown_;
-    float speedRotateRightLeft_;
-    float speedLoopRightLeft_;
-
-    float maxSpeedForward_;
-    float maxSpeedRotateUpDown_;
-    float maxSpeedRotateRightLeft_;
-    float maxSpeedLoopRightLeft_;
-
-    float accelerationForward_;
-    float accelerationRotateUpDown_;
-    float accelerationRotateRightLeft_;
-    float accelerationLoopRightLeft_;
-
-  };
-}
-
-
-#endif /* _SpaceShipSteering_H__ */
Index: code/branches/input/src/orxonox/objects/SpaceshipSteeringObject.cc
===================================================================
--- code/branches/input/src/orxonox/objects/SpaceshipSteeringObject.cc	(revision 943)
+++ 	(revision )
@@ -1,91 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   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:
- *      ...
- *   Co-authors:
- *      ...
- *
- */
-
-#include "OrxonoxStableHeaders.h"
-
-#include <OgreSceneManager.h>
-#include <OgreSceneNode.h>
-#include <OgreRoot.h>
-#include <OgreRenderWindow.h>
-
-#include <string>
-
-#include "../Orxonox.h"
-#include "../GraphicsEngine.h"
-#include "util/tinyxml/tinyxml.h"
-#include "util/Tokenizer.h"
-#include "util/String2Number.h"
-#include "core/CoreIncludes.h"
-#include "SpaceshipSteeringObject.h"
-
-#include "../SpaceshipSteering.h"
-
-namespace orxonox
-{
-    CreateFactory(SpaceshipSteeringObject);
-
-    SpaceshipSteeringObject::SpaceshipSteeringObject()
-    {
-        RegisterObject(SpaceshipSteeringObject);
-    }
-
-    SpaceshipSteeringObject::~SpaceshipSteeringObject()
-    {
-    }
-
-    void SpaceshipSteeringObject::loadParams(TiXmlElement* xmlElem)
-    {
-      SpaceshipSteering* steering = orxonox::Orxonox::getSingleton()->getSteeringPointer();
-
-      if (xmlElem->Attribute("node") && xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft"))
-      {
-        std::string nodeStr = xmlElem->Attribute("node");
-        std::string forwardStr = xmlElem->Attribute("forward");
-        std::string rotateupdownStr = xmlElem->Attribute("rotateupdown");
-        std::string rotaterightleftStr = xmlElem->Attribute("rotaterightleft");
-        std::string looprightleftStr = xmlElem->Attribute("looprightleft");
-
-        float forward, rotateupdown, rotaterightleft, looprightleft;
-        String2Number<float>(forward, forwardStr);
-        String2Number<float>(rotateupdown, rotateupdownStr);
-        String2Number<float>(rotaterightleft, rotaterightleftStr);
-        String2Number<float>(looprightleft, looprightleftStr);
-
-        steering = new SpaceshipSteering(forward, rotateupdown, rotaterightleft, looprightleft);
-
-        Ogre::SceneManager* mgr = orxonox::Orxonox::getSingleton()->getSceneManager();
-        Ogre::SceneNode* sceneNode = (Ogre::SceneNode*)mgr->getRootSceneNode()->getChild(nodeStr);
-
-        steering->addNode(sceneNode);
-
-
-
-
-        COUT(4) << "Loader: Initialized spaceship steering at node " << nodeStr << " values "<< forward << " " << rotateupdown << " "<< rotaterightleft << " "<< looprightleft << " "<< std::endl << std::endl;
-      }
-   }
-}
Index: code/branches/input/src/orxonox/objects/SpaceshipSteeringObject.h
===================================================================
--- code/branches/input/src/orxonox/objects/SpaceshipSteeringObject.h	(revision 943)
+++ 	(revision )
@@ -1,24 +1,0 @@
-#ifndef _OBJECT_SPACESHIPSTEERING_H__
-#define _OBJECT_SPACESHIPSTEERING_H__
-
-#include "core/BaseObject.h"
-#include "util/tinyxml/tinyxml.h"
-
-namespace orxonox
-{
-    class SpaceshipSteeringObject : public BaseObject
-    {
-        public:
-            SpaceshipSteeringObject();
-            virtual ~SpaceshipSteeringObject();
-
-
-            void loadParams(TiXmlElement* xmlElem);
-
-        private:
-
-
-    };
-}
-
-#endif
Index: code/branches/input/src/orxonox/objects/Test.h
===================================================================
--- code/branches/input/src/orxonox/objects/Test.h	(revision 943)
+++ 	(revision )
@@ -1,177 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   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:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#ifndef _Test_H__
-#define _Test_H__
-
-#include "core/BaseObject.h"
-
-namespace orxonox
-{
-    class Interface1 : virtual public OrxonoxClass
-    {
-        protected:
-            Interface1() { RegisterRootObject(Interface1); }
-    };
-
-    class Interface2 : virtual public OrxonoxClass
-    {
-        protected:
-            Interface2() { RegisterRootObject(Interface2); }
-    };
-
-    class A1 : public BaseObject
-    {
-        public:
-            A1() { RegisterObject(A1); }
-    };
-
-    class A2 : public BaseObject
-    {
-        public:
-            A2() { RegisterObject(A2); }
-    };
-
-    class A3: public BaseObject, public Interface1
-    {
-        public:
-            A3() { RegisterObject(A3); }
-    };
-
-    class A1B1 : public A1
-    {
-        public:
-            A1B1() { RegisterObject(A1B1); }
-    };
-
-    class A1B2 : public A1
-    {
-        public:
-            A1B2() { RegisterObject(A1B2); }
-//            virtual void test() = 0;
-    };
-
-    class A2B1 : public A2
-    {
-        public:
-            A2B1() { RegisterObject(A2B1); }
-    };
-
-    class A2B2 : public A2, Interface1
-    {
-        public:
-            A2B2() { RegisterObject(A2B2); }
-    };
-
-    class A3B1 : public A3
-    {
-        public:
-            A3B1() { RegisterObject(A3B1); }
-    };
-
-    class A3B2 : public A3, Interface2
-    {
-        public:
-            A3B2() { RegisterObject(A3B2); }
-    };
-
-    class A1B1C1 : public A1B1
-    {
-        public:
-            A1B1C1() { RegisterObject(A1B1C1); }
-    };
-
-    class A1B1C2 : public A1B1
-    {
-        public:
-            A1B1C2() { RegisterObject(A1B1C2); }
-    };
-
-    class A1B2C1 : public A1B2
-    {
-        public:
-            A1B2C1() { RegisterObject(A1B2C1); }
-//            void test() { std::cout << "test!\n"; }
-    };
-
-    class A2B1C1 : public A2B1, Interface2
-    {
-        public:
-            A2B1C1() { RegisterObject(A2B1C1); }
-    };
-
-    class A2B2C1 : public A2B2
-    {
-        public:
-            A2B2C1() { RegisterObject(A2B2C1); }
-    };
-
-    class A3B1C1 : public A3B1
-    {
-        public:
-            A3B1C1() { RegisterObject(A3B1C1); }
-    };
-
-    class A3B1C2 : public A3B1, Interface2
-    {
-        public:
-            A3B1C2() { RegisterObject(A3B1C2); }
-    };
-
-    class A3B2C1 : public A3B2
-    {
-        public:
-            A3B2C1() { RegisterObject(A3B2C1); }
-    };
-
-    class A3B2C2 : public A3B2
-    {
-        public:
-            A3B2C2() { RegisterObject(A3B2C2); }
-    };
-
-    CreateFactory(A1);
-    CreateFactory(A2);
-    CreateFactory(A3);
-    CreateFactory(A1B1);
-    CreateFactory(A1B2);
-    CreateFactory(A2B1);
-    CreateFactory(A2B2);
-    CreateFactory(A3B1);
-    CreateFactory(A3B2);
-    CreateFactory(A1B1C1);
-    CreateFactory(A1B1C2);
-    CreateFactory(A1B2C1);
-    CreateFactory(A2B1C1);
-    CreateFactory(A2B2C1);
-    CreateFactory(A3B1C1);
-    CreateFactory(A3B1C2);
-    CreateFactory(A3B2C1);
-    CreateFactory(A3B2C2);
-}
-
-#endif
Index: code/branches/input/src/orxonox/objects/test1.cc
===================================================================
--- code/branches/input/src/orxonox/objects/test1.cc	(revision 943)
+++ 	(revision )
@@ -1,103 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   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:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#include "test1.h"
-#include "test2.h"
-#include "test3.h"
-#include "core/CoreIncludes.h"
-
-namespace orxonox
-{
-    CreateFactory(Test1);
-
-    Test1::Test1()
-    {
-        RegisterObject(Test1);
-
-        this->usefullClass1_ = Class(Test1);
-        this->usefullClass2_ = Class(Test2);
-        this->usefullClass3_ = Class(Test3);
-    }
-
-    Test1::~Test1()
-    {
-    }
-
-    void Test1::tick(float dt)
-    {
-        std::cout << "Test1: " << this << std::endl;
-    }
-
-    bool Test1::usefullClass1isA(Identifier* identifier)
-    {
-        return this->usefullClass1_->isA(identifier);
-    }
-
-    bool Test1::usefullClass2isA(Identifier* identifier)
-    {
-        return this->usefullClass2_->isA(identifier);
-    }
-
-    bool Test1::usefullClass3isA(Identifier* identifier)
-    {
-        return this->usefullClass3_.isA(identifier);
-    }
-
-    void Test1::setUsefullClass1(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test1: usefullClass1->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test1: usefullClass1->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test1: usefullClass1->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass1_ = identifier;
-    }
-
-    void Test1::setUsefullClass2(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test1: usefullClass2->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test1: usefullClass2->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test1: usefullClass2->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass2_ = identifier;
-    }
-
-    void Test1::setUsefullClassOfTypeTest3(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test1: usefullClass3->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test1: usefullClass3->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test1: usefullClass3->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass3_ = identifier;
-    }
-
-    void Test1::loadParams(TiXmlElement* xmlElem)
-    {
-
-
-
-    }
-}
Index: code/branches/input/src/orxonox/objects/test1.h
===================================================================
--- code/branches/input/src/orxonox/objects/test1.h	(revision 943)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#ifndef _Test1_H__
-#define _Test1_H__
-
-#include "core/BaseObject.h"
-#include "Tickable.h"
-#include "test3.h"
-#include "util/tinyxml/tinyxml.h"
-
-namespace orxonox
-{
-    class Test1 : public BaseObject, public Tickable
-    {
-        public:
-            Test1();
-            virtual ~Test1();
-
-            virtual void tick(float dt);
-
-            bool usefullClass1isA(Identifier* identifier);
-            bool usefullClass2isA(Identifier* identifier);
-            bool usefullClass3isA(Identifier* identifier);
-            void setUsefullClass1(Identifier* identifier);
-            void setUsefullClass2(Identifier* identifier);
-            void setUsefullClassOfTypeTest3(Identifier* identifier);
-
-            void loadParams(TiXmlElement* xmlElem);
-
-        private:
-            Identifier* usefullClass1_;
-            Identifier* usefullClass2_;
-            SubclassIdentifier<Test3> usefullClass3_;
-
-    };
-}
-
-#endif
Index: code/branches/input/src/orxonox/objects/test2.cc
===================================================================
--- code/branches/input/src/orxonox/objects/test2.cc	(revision 943)
+++ 	(revision )
@@ -1,110 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   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:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#include "test1.h"
-#include "test2.h"
-#include "test3.h"
-#include "core/CoreIncludes.h"
-
-namespace orxonox
-{
-    CreateFactory(Test2);
-
-    Test2::Test2()
-    {
-        RegisterObject(Test2);
-
-        this->usefullClass1_ = Class(Test1);
-        this->usefullClass2_ = Class(Test2);
-        this->usefullClass3_ = Class(Test3);
-
-        timer1.setTimer(1, true, this, &Test2::timerFunction1);
-        timer2.setTimer(5, true, this, &Test2::timerFunction2);
-        timer3.setTimer(10, false, this, &Test2::timerFunction3);
-    }
-
-    Test2::~Test2()
-    {
-    }
-
-    void Test2::timerFunction1()
-    {
-        std::cout << "Test2: 1 Sekunde" << std::endl;
-    }
-
-    void Test2::timerFunction2()
-    {
-        std::cout << "Test2: 5 Sekunden" << std::endl;
-    }
-
-    void Test2::timerFunction3()
-    {
-        std::cout << "Test2: 10 Sekunden sind um!" << std::endl;
-    }
-
-    bool Test2::usefullClass1isA(Identifier* identifier)
-    {
-        return this->usefullClass1_->isA(identifier);
-    }
-
-    bool Test2::usefullClass2isA(Identifier* identifier)
-    {
-        return this->usefullClass2_->isA(identifier);
-    }
-
-    bool Test2::usefullClass3isA(Identifier* identifier)
-    {
-        return this->usefullClass3_.isA(identifier);
-    }
-
-    void Test2::setUsefullClass1(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test2: usefullClass1->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test2: usefullClass1->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test2: usefullClass1->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass1_ = identifier;
-    }
-
-    void Test2::setUsefullClass2(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test2: usefullClass2->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test2: usefullClass2->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test2: usefullClass2->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass2_ = identifier;
-    }
-
-    void Test2::setUsefullClassOfTypeTest3(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test2: usefullClass3->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test2: usefullClass3->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test2: usefullClass3->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass3_ = identifier;
-    }
-}
Index: code/branches/input/src/orxonox/objects/test2.h
===================================================================
--- code/branches/input/src/orxonox/objects/test2.h	(revision 943)
+++ 	(revision )
@@ -1,39 +1,0 @@
-#ifndef _Test2_H__
-#define _Test2_H__
-
-#include "core/BaseObject.h"
-#include "../tools/Timer.h"
-
-namespace orxonox
-{
-    class Test3;
-
-    class Test2 : public BaseObject
-    {
-        public:
-            Test2();
-            virtual ~Test2();
-
-            bool usefullClass1isA(Identifier* identifier);
-            bool usefullClass2isA(Identifier* identifier);
-            bool usefullClass3isA(Identifier* identifier);
-            void setUsefullClass1(Identifier* identifier);
-            void setUsefullClass2(Identifier* identifier);
-            void setUsefullClassOfTypeTest3(Identifier* identifier);
-
-            void timerFunction1();
-            void timerFunction2();
-            void timerFunction3();
-
-        private:
-            Identifier* usefullClass1_;
-            Identifier* usefullClass2_;
-            SubclassIdentifier<Test3> usefullClass3_;
-
-            Timer<Test2> timer1;
-            Timer<Test2> timer2;
-            Timer<Test2> timer3;
-    };
-}
-
-#endif
Index: code/branches/input/src/orxonox/objects/test3.cc
===================================================================
--- code/branches/input/src/orxonox/objects/test3.cc	(revision 943)
+++ 	(revision )
@@ -1,116 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   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:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#include "test1.h"
-#include "test2.h"
-#include "test3.h"
-#include "core/CoreIncludes.h"
-
-namespace orxonox
-{
-    CreateFactory(Test3);
-
-    Test3::Test3()
-    {
-        RegisterObject(Test3);
-
-        this->setConfigValues();
-    }
-
-    void Test3::setConfigValues()
-    {
-        SetConfigValue(value_int_, 1);
-        SetConfigValue(value_uint_, 1);
-        SetConfigValue(value_char_, 1);
-        SetConfigValue(value_uchar_, 1);
-        SetConfigValue(value_float_, 1);
-        SetConfigValue(value_double_, 1);
-        SetConfigValue(value_bool_, 1);
-        SetConfigValue(value_string_, "This is a test");
-        SetConfigValue(value_constchar_, "This is another test");
-        SetConfigValue(value_vector2_, Vector2(101, 202));
-        SetConfigValue(value_vector3_, Vector3(13, 26, 39));
-        SetConfigValue(value_colourvalue_, ColourValue(1.0, 0.5, 0.25, 0.887));
-    }
-
-    Test3::~Test3()
-    {
-    }
-
-    void Test3::configOutput()
-    {
-        std::cout << "int:         " << this->value_int_ << std::endl;
-        std::cout << "uint:        " << this->value_uint_ << std::endl;
-        std::cout << "char:        " << (int)this->value_char_ << std::endl;
-        std::cout << "uchar:       " << (int)this->value_uchar_ << std::endl;
-        std::cout << "float:       " << this->value_float_ << std::endl;
-        std::cout << "double:      " << this->value_double_ << std::endl;
-        std::cout << "bool:        " << this->value_bool_ << std::endl;
-        std::cout << "string:      " << this->value_string_ << std::endl;
-        std::cout << "constchar:   " << this->value_constchar_ << std::endl;
-        std::cout << "vector2:     " << this->value_vector2_ << std::endl;
-        std::cout << "vector3:     " << this->value_vector3_ << std::endl;
-        std::cout << "colourvalue: " << this->value_colourvalue_ << std::endl;
-    }
-
-    #define testandcout(code) \
-      std::cout << #code << " " << code << std::endl
-
-    void Test3::usefullClassesIsATest(Test1* test1)
-    {
-        std::cout << std::endl;
-        std::cout << "Test1:" << std::endl;
-        testandcout(test1->usefullClass1isA(Class(Test1)));
-        testandcout(test1->usefullClass1isA(Class(Test2)));
-        testandcout(test1->usefullClass1isA(Class(Test3)));
-        std::cout << std::endl;
-        testandcout(test1->usefullClass2isA(Class(Test1)));
-        testandcout(test1->usefullClass2isA(Class(Test2)));
-        testandcout(test1->usefullClass2isA(Class(Test3)));
-        std::cout << std::endl;
-        testandcout(test1->usefullClass3isA(Class(Test1)));
-        testandcout(test1->usefullClass3isA(Class(Test2)));
-        testandcout(test1->usefullClass3isA(Class(Test3)));
-    }
-
-    void Test3::usefullClassesIsATest(Test2* test2)
-    {
-        std::cout << std::endl;
-        std::cout << "Test2:" << std::endl;
-        testandcout(test2->usefullClass1isA(Class(Test1)));
-        testandcout(test2->usefullClass1isA(Class(Test2)));
-        testandcout(test2->usefullClass1isA(Class(Test3)));
-        std::cout << std::endl;
-        testandcout(test2->usefullClass2isA(Class(Test1)));
-        testandcout(test2->usefullClass2isA(Class(Test2)));
-        testandcout(test2->usefullClass2isA(Class(Test3)));
-        std::cout << std::endl;
-        testandcout(test2->usefullClass3isA(Class(Test1)));
-        testandcout(test2->usefullClass3isA(Class(Test2)));
-        testandcout(test2->usefullClass3isA(Class(Test3)));
-    }
-}
Index: code/branches/input/src/orxonox/objects/test3.h
===================================================================
--- code/branches/input/src/orxonox/objects/test3.h	(revision 943)
+++ 	(revision )
@@ -1,41 +1,0 @@
-#ifndef _Test3_H__
-#define _Test3_H__
-
-#include "core/BaseObject.h"
-#include "util/Math.h"
-
-namespace orxonox
-{
-    class Test1;
-    class Test2;
-
-    class Test3 : public BaseObject
-    {
-        public:
-            Test3();
-            virtual ~Test3();
-
-            void setConfigValues();
-
-            void usefullClassesIsATest(Test1* test1);
-            void usefullClassesIsATest(Test2* test2);
-
-            void configOutput();
-
-        private:
-            int                 value_int_;
-            unsigned int        value_uint_;
-            char                value_char_;
-            unsigned char       value_uchar_;
-            float               value_float_;
-            double              value_double_;
-            bool                value_bool_;
-            std::string         value_string_;
-            const char*         value_constchar_;
-            Vector2             value_vector2_;
-            Vector3             value_vector3_;
-            ColourValue         value_colourvalue_;
-    };
-}
-
-#endif
Index: code/branches/input/visual_studio/base_properties.vsprops
===================================================================
--- code/branches/input/visual_studio/base_properties.vsprops	(revision 943)
+++ code/branches/input/visual_studio/base_properties.vsprops	(revision 944)
@@ -23,5 +23,5 @@
 		OutputFile="$(OutDir)$(ProjectName)$(CS).dll"
 		AdditionalLibraryDirectories="$(DependencyDir)lib"
-		SubSystem="2"
+		SubSystem="1"
 		ImportLibrary="$(LibOutDir)$(TargetName).lib"
 		TargetMachine="1"
@@ -33,5 +33,5 @@
 	<UserMacro
 		Name="DependencyDir"
-		Value="D:\orxonox\dependencies\orxonox\"
+		Value="$(RootDir)..\dependencies\"
 	/>
 	<UserMacro
Index: code/branches/input/visual_studio/vc8/loader.vcproj
===================================================================
--- code/branches/input/visual_studio/vc8/loader.vcproj	(revision 943)
+++ 	(revision )
@@ -1,296 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="loader"
-	ProjectGUID="{E283910F-F911-40FB-A09D-D025CA821912}"
-	RootNamespace="FICN"
-	Keyword="Win32Proj"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(SolutionDir)base_properties_debug.vsprops;..\loader_properties.vsprops"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release.vsprops;..\loader_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse.vsprops;..\loader_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE2|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse2.vsprops;..\loader_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath="..\..\src\loader\LevelLoader.cc"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc;xsd"
-			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-			>
-			<File
-				RelativePath="..\..\src\loader\LevelLoader.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\loader\LoaderPrereqs.h"
-				>
-			</File>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
