Index: /orxonox/trunk/core/input_output.cc
===================================================================
--- /orxonox/trunk/core/input_output.cc	(revision 1899)
+++ /orxonox/trunk/core/input_output.cc	(revision 1900)
@@ -40,19 +40,25 @@
 
 
+void InputOutput::setPlayerStep(float step)
+{
+  cout << "setting player step to: " << step << endl;
+  this->step = step;
+}
+
 
 void InputOutput::goUp() 
 {
   //cout << "InoutOutput::goUp" << endl;
-  (*player).goY(STEP_FRONT);
+  (*player).goY(step);
 }
 
 void InputOutput::goDown() 
 {
-  (*player).goY(-STEP_FRONT);
+  (*player).goY(-step);
 }
 
 void InputOutput::goLeft()
 {
-  (*player).goX(-STEP_SIDE);
+  (*player).goX(-step);
 
 }
@@ -61,5 +67,5 @@
 {
 
-  (*player).goX(STEP_SIDE);
+  (*player).goX(step);
 }
 
Index: /orxonox/trunk/core/input_output.h
===================================================================
--- /orxonox/trunk/core/input_output.h	(revision 1899)
+++ /orxonox/trunk/core/input_output.h	(revision 1900)
@@ -9,6 +9,4 @@
 #include "player.h"
 
-#define STEP_SIDE 0.4
-#define STEP_FRONT 0.4
 
 class InputOutput {
@@ -18,8 +16,11 @@
   Player* player;
 
+  float step;
+
  public:
   InputOutput (World* wld, Player* player);
   ~InputOutput ();
 
+  void setPlayerStep(float step);
   void goUp(void);
   void goDown(void);
Index: /orxonox/trunk/core/orxonox.cc
===================================================================
--- /orxonox/trunk/core/orxonox.cc	(revision 1899)
+++ /orxonox/trunk/core/orxonox.cc	(revision 1900)
@@ -51,4 +51,5 @@
 Player* Orxonox::localPlayer = 0;
 bool Orxonox::pause = false;
+bool Orxonox::inputEnabled = false;
 bool Orxonox::upWeGo = false;
 bool Orxonox::downWeGo = false;
@@ -87,4 +88,5 @@
 
   glutTimerFunc(1000, timeSlice, 0);
+  cout << "measuring performance...";
 }
 
@@ -114,4 +116,9 @@
   world->addNPC(npc);
 
+  NPC* npc2 = new NPC;
+  npc2->setPosition(-2.0, 10.0, 3.0);
+  npc2->setCollisionRadius(1.0);
+  world->addNPC(npc2);
+
   glutSpecialFunc(specFunc); 
   glutSpecialUpFunc(releaseKey);
@@ -126,6 +133,10 @@
 void Orxonox::timeSlice(int value)
 {
-  cout << "fps: " << fps << endl;
+  cout << "got " << fps << endl;
+  /* this is very very unsafe: io could be uninit */
+  io->setPlayerStep(19.2 / fps); /* set player to propper speed */
+  //localPlayer->shootLaser->setShootStep(fps/48.0); /* set shoot speed */
   fps = 0;
+  inputEnabled = true;
   glutTimerFunc(1000, timeSlice, 0);
 }
@@ -259,16 +270,18 @@
 
   /* check for input to pass it over */
-  if ( !pause && (rightWeGo || leftWeGo || upWeGo || downWeGo || shoot1)) {
-    if (upWeGo)
-      (*io).goUp();
-    if (downWeGo)
+  if ( !pause && inputEnabled && 
+       (rightWeGo || leftWeGo || upWeGo || downWeGo || shoot1)) 
+    {
+      if (upWeGo)
+	(*io).goUp();
+      if (downWeGo)
       (*io).goDown();
-    if (rightWeGo)
-      (*io).goRight();
-    if (leftWeGo)
+      if (rightWeGo)
+	(*io).goRight();
+      if (leftWeGo)
       (*io).goLeft();
-    if (shoot1) 
-      (*io).shoot();
-  }
+      if (shoot1) 
+	(*io).shoot();
+    }
   /* request repaint */
   glutPostRedisplay();
Index: /orxonox/trunk/core/orxonox.h
===================================================================
--- /orxonox/trunk/core/orxonox.h	(revision 1899)
+++ /orxonox/trunk/core/orxonox.h	(revision 1900)
@@ -31,4 +31,5 @@
   static Player* localPlayer;
   static bool pause;
+  static bool inputEnabled;
   static bool upWeGo;
   static bool downWeGo;
Index: /orxonox/trunk/core/player.cc
===================================================================
--- /orxonox/trunk/core/player.cc	(revision 1899)
+++ /orxonox/trunk/core/player.cc	(revision 1900)
@@ -47,4 +47,11 @@
 }
 
+
+void Player::setCollisionRadius(float radius) 
+{
+  collisionRadius = radius;
+}
+
+
 void Player::goX(float x) 
 {
@@ -67,4 +74,6 @@
 {
   shootLaser->addShoot(xCor, yCor, zCor);
+  shootLaser->addShootExt(xCor, yCor, zCor, .1, .4, .0);
+  shootLaser->addShootExt(xCor, yCor, zCor, -0.1, .4, .0);
   //cout << "Player::shoot" << endl;
 }
Index: /orxonox/trunk/core/player.h
===================================================================
--- /orxonox/trunk/core/player.h	(revision 1899)
+++ /orxonox/trunk/core/player.h	(revision 1900)
@@ -19,4 +19,6 @@
   float yCor;
   float zCor;
+  
+  float collisionRadius;
 
   /* this player wanna shoot? so include a ref to ShootLaser */
@@ -25,4 +27,5 @@
   void setPosition(float x, float y, float z);
   void getPosition(float* x, float* y, float* z);
+  void setCollisionRadius(float radius);
   void goX(float x);
   void goY(float y);
Index: /orxonox/trunk/core/shoot_laser.cc
===================================================================
--- /orxonox/trunk/core/shoot_laser.cc	(revision 1899)
+++ /orxonox/trunk/core/shoot_laser.cc	(revision 1900)
@@ -29,4 +29,5 @@
 {
   lastShoot = null;
+  step = 1.0;
 }
 
@@ -46,4 +47,5 @@
       glPushMatrix(); 
       glTranslatef(tmpShoot->xCor, tmpShoot->yCor, tmpShoot->zCor);
+      tmpShoot->xCor+=tmpShoot->xInc;
       tmpShoot->yCor+=tmpShoot->yInc;
       glScalef(0.1, 0.1, 0.1);
@@ -55,34 +57,37 @@
       /* fix2: conditions, that a struct tree can be cut off */
       /* fix3: more efficent and nicer please */
-      if (tmpShoot->yCor > 50) 
+      if (tmpShoot->yCor > 20) 
 	{
+	  /* normal case: delete one element, link the others */
 	  if (lastRef != null) 
 	    {
-	      cout << "garbage collection" << endl;
+	      //cout << "garbage collection" << endl;
 	      lastRef->next = tmpShoot->next;
 	      delete tmpShoot;
-	      tmpShoot = lastRef;	  
-	      lastRef = tmpShoot;
-	      tmpShoot = tmpShoot->next;
-	      cout << "garbage collection left" << endl;
+	      tmpShoot = lastRef->next;
+	      //cout << "garbage collection left" << endl;
 	    }
 	  else
 	    {
-	      cout << "garbage collecton on last el" << endl;
+	      /* special case: first element to be processed */
+	      //cout << "garbage collecton: first el in queue" << endl;
 	      lastRef = tmpShoot->next;
 	      delete tmpShoot;
 	      tmpShoot = lastRef;
-	      if (tmpShoot != null) {
-		lastRef = tmpShoot;
-		tmpShoot = tmpShoot->next;
-		cout << "noch nich null" << endl;
-	      }
-	      else {
-		lastRef = null;
-		tmpShoot = null;
-		lastShoot = null;
-		cout << "endl null" << endl;
-	      }
-	      cout << "garbage collection on last el left" << endl;
+	      lastShoot = tmpShoot;
+	      if (tmpShoot != null) 
+		{
+		  tmpShoot = tmpShoot->next;
+		  //cout << "noch nich null" << endl;
+		}
+	      else 
+		{
+		  lastRef = null;
+		  tmpShoot = null;
+		  lastShoot = null;
+		  //cout << "endl null" << endl;
+		}
+	      
+	      //cout << "garbage collection: firtst el in queue left" << endl;
 	    }
 	}
@@ -108,7 +113,34 @@
   shoot* sh = new shoot;
   sh->xCor = x; sh->yCor = y; sh->zCor = z;
-  sh->xInc = 0; sh->yInc = .2; sh->zInc = 0;
+  sh->xInc = 0; sh->yInc = .4/step; sh->zInc = 0;
   sh->next = lastShoot;
   lastShoot = sh;
 }
 
+void ShootLaser::addShootExt(float x, float y, float z, 
+			     float xInc, float yInc, float zInc)
+{
+  //cout << "ShootLaser::addShootExtended" << endl;
+  shoot* sh = new shoot;
+  sh->xCor = x; sh->yCor = y; sh->zCor = z;
+  sh->xInc = xInc/step; sh->yInc = yInc/step; sh->zInc = zInc/step;
+  sh->next = lastShoot;
+  lastShoot = sh;
+}
+
+void ShootLaser::setShootStep(float step) 
+{
+  cout << "ShootLaser::setShootStep to " << step << endl;
+  this->step = step;
+}
+
+
+/* Exterminate shoot from game, implement this method  */
+/* if you like to add animatiion */
+void ShootLaser::removeShoot(shoot* sh)
+{
+  glPushMatrix(); 
+  glTranslatef(sh->xCor, sh->yCor, sh->zCor);
+  glutWireCube(1.0);
+  glPopMatrix();
+}
Index: /orxonox/trunk/core/shoot_laser.h
===================================================================
--- /orxonox/trunk/core/shoot_laser.h	(revision 1899)
+++ /orxonox/trunk/core/shoot_laser.h	(revision 1900)
@@ -29,11 +29,16 @@
   ~ShootLaser ();
 
-  void drawShoot();
+  void drawShoot(void);
   void addShoot(shoot* sh);
   void addShoot(float x, float y, float z);
+  void addShootExt(float x, float y, float z, float xInc, float yInc, float zInc);
+  void setShootStep(float step);
+  void removeShoot(shoot* sh);
 
 
  private:
 
+  float step;
+
 };
 
Index: /orxonox/trunk/core/world.cc
===================================================================
--- /orxonox/trunk/core/world.cc	(revision 1899)
+++ /orxonox/trunk/core/world.cc	(revision 1900)
@@ -1,3 +1,2 @@
-
 
 /* 
@@ -232,4 +231,5 @@
 void World::detectCollision() 
 {
+  //cout << "World::detectCollision" << endl;
   float xOff, yOff, zOff, radius;
   npcList* tmpNPC;
@@ -263,4 +263,26 @@
   /* second: check if any player hits an enemy */
 
+  /*
+  tmpPlayer = lastPlayer;
+  while( tmpPlayer != null ) 
+    {
+      tmpNPC = lastNPC;
+      while( tmpNPC != null )
+	{
+ 	  radius = tmpNPC->npc->collisionRadius + tmpPlayer->player->collisionRadius;
+	  xOff = tmpPlayer->player->xCor - tmpNPC->npc->xCor;
+	  yOff = tmpPlayer->player->yCor - tmpNPC->npc->yCor;
+	  zOff = tmpPlayer->player->zCor - tmpNPC->npc->zCor;
+	  if ( sqrt(xOff*xOff + yOff*yOff + zOff*zOff) < radius )
+	    cout << "COLLISION " << endl;
+	  
+	  tmpNPC = tmpNPC->next;
+	}
+      
+      tmpPlayer = tmpPlayer->next;
+    }
+  
+  */
+
   /* third: check if any enemy shoots a player */
 
