Index: orxonox/trunk/src/Makefile.am
===================================================================
--- orxonox/trunk/src/Makefile.am	(revision 4325)
+++ orxonox/trunk/src/Makefile.am	(revision 4326)
@@ -75,4 +75,5 @@
 		 lib/coord/null_parent.cc \
 		 lib/coord/helper_parent.cc \
+		 lib/coord/pilot_node.cc \
 		 lib/graphics/graphics_engine.cc \
 		 lib/graphics/light.cc \
@@ -100,4 +101,5 @@
 		 defs/keynames.h \
 		 command_node.h \
+		 action_listener.h \
 		 defs/message_structures.h \
 		 util/loading/game_loader.h \
@@ -143,4 +145,5 @@
 		 lib/coord/null_parent.h \
 		 lib/coord/helper_parent.h \
+		 lib/coord/pilot_node.h \
 		 lib/graphics/graphics_engine.h \
 		 lib/graphics/light.h \
Index: orxonox/trunk/src/Makefile.in
===================================================================
--- orxonox/trunk/src/Makefile.in	(revision 4325)
+++ orxonox/trunk/src/Makefile.in	(revision 4326)
@@ -68,5 +68,5 @@
 	test_bullet.$(OBJEXT) test_entity.$(OBJEXT) p_node.$(OBJEXT) \
 	null_parent.$(OBJEXT) helper_parent.$(OBJEXT) \
-	graphics_engine.$(OBJEXT) light.$(OBJEXT) \
+	pilot_node.$(OBJEXT) graphics_engine.$(OBJEXT) light.$(OBJEXT) \
 	text_engine.$(OBJEXT) array.$(OBJEXT) objModel.$(OBJEXT) \
 	md2Model.$(OBJEXT) primitive_model.$(OBJEXT) model.$(OBJEXT) \
@@ -105,5 +105,5 @@
 @AMDEP_TRUE@	./$(DEPDIR)/particle_engine.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/particle_system.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/player.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/pilot_node.Po ./$(DEPDIR)/player.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/primitive_model.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/projectile.Po \
@@ -290,4 +290,5 @@
 		 lib/coord/null_parent.cc \
 		 lib/coord/helper_parent.cc \
+		 lib/coord/pilot_node.cc \
 		 lib/graphics/graphics_engine.cc \
 		 lib/graphics/light.cc \
@@ -315,4 +316,5 @@
 		 defs/keynames.h \
 		 command_node.h \
+		 action_listener.h \
 		 defs/message_structures.h \
 		 util/loading/game_loader.h \
@@ -358,4 +360,5 @@
 		 lib/coord/null_parent.h \
 		 lib/coord/helper_parent.h \
+		 lib/coord/pilot_node.h \
 		 lib/graphics/graphics_engine.h \
 		 lib/graphics/light.h \
@@ -498,4 +501,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/particle_engine.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/particle_system.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pilot_node.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/primitive_model.Po@am__quote@
@@ -1063,4 +1067,20 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o helper_parent.obj `if test -f 'lib/coord/helper_parent.cc'; then $(CYGPATH_W) 'lib/coord/helper_parent.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/helper_parent.cc'; fi`
+
+pilot_node.o: lib/coord/pilot_node.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT pilot_node.o -MD -MP -MF "$(DEPDIR)/pilot_node.Tpo" -c -o pilot_node.o `test -f 'lib/coord/pilot_node.cc' || echo '$(srcdir)/'`lib/coord/pilot_node.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/pilot_node.Tpo" "$(DEPDIR)/pilot_node.Po"; else rm -f "$(DEPDIR)/pilot_node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/coord/pilot_node.cc' object='pilot_node.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/pilot_node.Po' tmpdepfile='$(DEPDIR)/pilot_node.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o pilot_node.o `test -f 'lib/coord/pilot_node.cc' || echo '$(srcdir)/'`lib/coord/pilot_node.cc
+
+pilot_node.obj: lib/coord/pilot_node.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT pilot_node.obj -MD -MP -MF "$(DEPDIR)/pilot_node.Tpo" -c -o pilot_node.obj `if test -f 'lib/coord/pilot_node.cc'; then $(CYGPATH_W) 'lib/coord/pilot_node.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/pilot_node.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/pilot_node.Tpo" "$(DEPDIR)/pilot_node.Po"; else rm -f "$(DEPDIR)/pilot_node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/coord/pilot_node.cc' object='pilot_node.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/pilot_node.Po' tmpdepfile='$(DEPDIR)/pilot_node.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o pilot_node.obj `if test -f 'lib/coord/pilot_node.cc'; then $(CYGPATH_W) 'lib/coord/pilot_node.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/pilot_node.cc'; fi`
 
 graphics_engine.o: lib/graphics/graphics_engine.cc
Index: orxonox/trunk/src/action_listener.h
===================================================================
--- orxonox/trunk/src/action_listener.h	(revision 4326)
+++ orxonox/trunk/src/action_listener.h	(revision 4326)
@@ -0,0 +1,27 @@
+/*! 
+    \file proto_class.h
+    \brief Definition of ...
+
+*/
+
+#ifndef _ACTION_LISTENER_H
+#define _ACTION_LISTENER_H
+
+#include "base_object.h"
+
+
+
+//! an abstract class that stands for an action listener
+class ActionListener : public BaseObject {
+
+ public:
+  ActionListener();
+  virtual ~ActionListener();
+
+  void actionPerformed() {}
+
+  virtual void command(Command* cmd) = NULL;
+
+};
+
+#endif /* _ACTION_LISTENER_H */
Index: orxonox/trunk/src/class_list.h
===================================================================
--- orxonox/trunk/src/class_list.h	(revision 4325)
+++ orxonox/trunk/src/class_list.h	(revision 4326)
@@ -18,4 +18,5 @@
   CL_CAMERA,
   CL_CAMERA_TARGET,
+  CL_PILOT_PARENT,
 
   CL_WORLD_ENTITY,
Index: orxonox/trunk/src/command_node.cc
===================================================================
--- orxonox/trunk/src/command_node.cc	(revision 4325)
+++ orxonox/trunk/src/command_node.cc	(revision 4326)
@@ -24,4 +24,5 @@
 #include "list.h"
 #include "orxonox.h"
+#include "p_node.h"
 
 #include <stdio.h>
@@ -37,5 +38,5 @@
 CommandNode::CommandNode (int ID)
 {
-  this->bound = new tList<WorldEntity>();
+  this->bound = new tList<PNode>();
   this->aliases = NULL;
   this->netID = ID;
@@ -54,5 +55,5 @@
   this->bLocalInput = true;
   this->netID = 0;
-  this->bound = new tList<WorldEntity>();
+  this->bound = new tList<PNode>();
   this->bEnabled = true;
   this->world = NULL;
@@ -194,5 +195,5 @@
    \param entity: Pointer to the entity to bind
 */
-void CommandNode::bind (WorldEntity* entity)
+void CommandNode::bind (PNode* entity)
 {
   bound->add (entity);
@@ -203,5 +204,5 @@
    \param entity: Pointer to the entity to relese
 */
-void CommandNode::unbind (WorldEntity* entity)
+void CommandNode::unbind (PNode* entity)
 {
   bound->remove (entity);
@@ -264,4 +265,5 @@
 	  cmd.xrel = event.motion.xrel;
 	  cmd.yrel = event.motion.yrel;
+	  if( strlen (cmd.cmd) > 0) relay(&cmd);
 	  break;
 	case SDL_MOUSEBUTTONUP:
@@ -308,9 +310,9 @@
   if( this->world->command(cmd)) return;
 
-  tIterator<WorldEntity>* iterator = bound->getIterator();
-  WorldEntity* entity = iterator->nextElement();
+  tIterator<PNode>* iterator = bound->getIterator();
+  PNode* entity = iterator->nextElement();
   while( entity != NULL)
     {
-      entity->command (cmd); /*no absorbtion of command! strange*/
+      ((WorldEntity*)entity)->command (cmd); /*no absorbtion of command! strange*/
       entity = iterator->nextElement();
     }
Index: orxonox/trunk/src/command_node.h
===================================================================
--- orxonox/trunk/src/command_node.h	(revision 4325)
+++ orxonox/trunk/src/command_node.h	(revision 4326)
@@ -15,4 +15,5 @@
 class WorldEntity;
 class World;
+class PNode;
 
 #define N_STD_KEYS SDLK_LAST
@@ -45,5 +46,5 @@
   int netID;	//!< Unique identifier that is used to determine between remote CommandNodes
   KeyBindings* aliases;
-  tList<WorldEntity>* bound;	//!< List of WorldEntites that recieve commands from this CommandNode
+  tList<PNode>* bound;	//!< List of WorldEntites that recieve commands from this CommandNode
   Sint32 coord[2];
   World* world;
@@ -64,6 +65,6 @@
   void enable (bool bEnabled);
   void loadBindings (char* filename);
-  void bind (WorldEntity* entity);
-  void unbind (WorldEntity* entity);
+  void bind (PNode* entity);
+  void unbind (PNode* entity);
   void addToWorld (World* world);
   void process ();
Index: orxonox/trunk/src/lib/coord/p_node.h
===================================================================
--- orxonox/trunk/src/lib/coord/p_node.h	(revision 4325)
+++ orxonox/trunk/src/lib/coord/p_node.h	(revision 4326)
@@ -91,5 +91,4 @@
   const char* getName ();
 
-
   void debug ();
 
Index: orxonox/trunk/src/lib/coord/pilot_node.cc
===================================================================
--- orxonox/trunk/src/lib/coord/pilot_node.cc	(revision 4326)
+++ orxonox/trunk/src/lib/coord/pilot_node.cc	(revision 4326)
@@ -0,0 +1,55 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "pilot_node.h"
+#include "command_node.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+PilotNode::PilotNode () 
+{
+   this->setClassID(CL_PILOT_PARENT, "PilotNode");
+}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+PilotNode::~PilotNode () 
+{
+
+}
+
+
+void PilotNode::command(Command* cmd)
+{
+  printf("Mouse moved by %d,%d to (%d,%d)\n", 
+	 cmd->xrel, cmd->yrel,
+	 cmd->x, cmd->y);
+
+  //this->setAbsDir(Quaternion(M_PI * 0.4, Vector(1, 0, 0)));
+}
Index: orxonox/trunk/src/lib/coord/pilot_node.h
===================================================================
--- orxonox/trunk/src/lib/coord/pilot_node.h	(revision 4326)
+++ orxonox/trunk/src/lib/coord/pilot_node.h	(revision 4326)
@@ -0,0 +1,23 @@
+/*! 
+    \file helper_parent.h
+    \brief this is a parent class, that isn't visible in the real world itself
+*/
+
+
+#ifndef _PILOT_NODE_H
+#define _PILOT_NODE_H
+
+#include "comincl.h"
+#include "p_node.h"
+
+class PilotNode : public PNode {
+
+ public:
+  PilotNode ();
+  virtual ~PilotNode ();
+  
+  void command(Command* cmd);
+
+};
+
+#endif /* _PILOT_NODE_H */
Index: orxonox/trunk/src/story_entities/world.cc
===================================================================
--- orxonox/trunk/src/story_entities/world.cc	(revision 4325)
+++ orxonox/trunk/src/story_entities/world.cc	(revision 4326)
@@ -25,4 +25,5 @@
 #include "null_parent.h"
 #include "helper_parent.h"
+#include "pilot_node.h"
 #include "track_node.h"
 #include "world_entity.h"
@@ -473,4 +474,7 @@
 
 
+/**
+   \brief loads the debug world: only for experimental stuff
+*/
 void World::loadDebugWorld(int worldID)
 {
@@ -555,20 +559,13 @@
 
 
-	// create a player
 	this->localPlayer = new Player ();
 	this->localPlayer->setName ("player");
 	this->spawn (this->localPlayer);
 	/*monitor progress*/
-	//this->glmis->step();
 	this->glmis->step();
 
-	// bind input
-	Orxonox *orx = Orxonox::getInstance ();
-	orx->getLocalInput()->bind (this->localPlayer);
-	    
 	// bind camera
 	this->localCamera = new Camera();
 	this->localCamera->setName ("camera");
-	    
 	/*monitor progress*/
 	this->glmis->step();
@@ -591,12 +588,20 @@
 	this->glmis->step();
 
+	this->pilotNode = new PilotNode();
+	this->pilotNode->addChild(this->localPlayer);
+	this->pilotNode->addChild(this->localCamera);
+	// bind input
+	Orxonox *orx = Orxonox::getInstance ();
+	//orx->getLocalInput()->bind (this->pilotNode);	    
+	
+	/*
 	PNode* tn = trackManager->getTrackNode();
 	tn->addChild(this->localPlayer);
 	this->localCamera->lookAt(tn);
-
-
+	
 	tn->addChild(this->localCamera);
 	this->localPlayer->setMode(PNODE_ALL);
 	trackManager->condition(2, LEFTRIGHT, this->localPlayer);
+	*/
 	this->glmis->step();
 	break;
@@ -628,4 +633,5 @@
 {
   this->bPause = false;
+  this->pilotNode = NULL;
   CommandNode* cn = Orxonox::getInstance()->getLocalInput();
   cn->addToWorld(this);
@@ -1099,5 +1105,5 @@
   else if( !strcmp( cmd->cmd, CONFIG_NAME_VIEW4)) this->localCamera->setViewMode(VIEW_RIGHT);
   else if( !strcmp( cmd->cmd, CONFIG_NAME_VIEW5)) this->localCamera->setViewMode(VIEW_TOP);
-
+  else if(this->pilotNode != NULL) if( !strcmp( cmd->cmd, "cursor")) this->pilotNode->command(cmd);
   return false;
 }
Index: orxonox/trunk/src/story_entities/world.h
===================================================================
--- orxonox/trunk/src/story_entities/world.h	(revision 4325)
+++ orxonox/trunk/src/story_entities/world.h	(revision 4326)
@@ -24,4 +24,5 @@
 class Text;
 class TiXmlElement;
+class PilotNode;
 
 //! The game world Interface
@@ -120,4 +121,5 @@
   tList<WorldEntity>* entities;       //!< A template List of all entities. Every moving thing should be included here, and world automatically updates them.
   WorldEntity* localPlayer;           //!< The Player, you fly through the level.
+  PilotNode* pilotNode;               //!< THe pilot node to fly with the mouse
 
   GarbageCollector* garbageCollector; //!< reference to the garbage  collector
