Index: /orxonox/trunk/core/npc.cc
===================================================================
--- /orxonox/trunk/core/npc.cc	(revision 1898)
+++ /orxonox/trunk/core/npc.cc	(revision 1899)
@@ -30,10 +30,10 @@
 
 
-void NPC::setPosition(int x, int y, int z)
+void NPC::setPosition(float x, float y, float z)
 {
   xCor = x; yCor = y; zCor = z;
 }
 
-void NPC::getPosition(int* x, int* y, int* z) 
+void NPC::getPosition(float* x, float* y, float* z) 
 {
   *x = xCor; 
@@ -42,5 +42,5 @@
 }
 
-void NPC::setCollisionRadius(int r) 
+void NPC::setCollisionRadius(float r) 
 {
   collisionRadius = r;
@@ -56,4 +56,9 @@
 void NPC::drawNPC(void) 
 {
-  cout << "Player::drawNPC()" << endl;
+  glPushMatrix();
+  glTranslatef(xCor, yCor, 3.0);
+  //glScalef(1.0, 3.0, 1.0);
+  glutWireSphere(1.0, 10, 10);
+  glPopMatrix();
+  //cout << "Player::drawNPC()" << endl;
 }
Index: /orxonox/trunk/core/npc.h
===================================================================
--- /orxonox/trunk/core/npc.h	(revision 1898)
+++ /orxonox/trunk/core/npc.h	(revision 1899)
@@ -3,4 +3,6 @@
 #define NPC_H
 
+/* openGL Headers */
+#include <GL/glut.h>
 
 class NPC {
@@ -10,8 +12,15 @@
   ~NPC ();
 
+  /* collision control */
+  float collisionRadius;
+
+  float xCor;
+  float yCor;
+  float zCor;
+
   void drawNPC(void);
-  void setPosition(int x, int y, int z);
-  void getPosition(int* x, int* y, int* z);
-  void setCollisionRadius(int r);
+  void setPosition(float x, float y, float z);
+  void getPosition(float* x, float* y, float* z);
+  void setCollisionRadius(float r);
   float getCollisionRadius();
 
@@ -21,10 +30,5 @@
   int npcType;
 
-  /* collision control */
-  int collisionRadius;
 
-  int xCor;
-  int yCor;
-  int zCor;
 ;
 
Index: /orxonox/trunk/core/orxonox.cc
===================================================================
--- /orxonox/trunk/core/orxonox.cc	(revision 1898)
+++ /orxonox/trunk/core/orxonox.cc	(revision 1899)
@@ -99,11 +99,18 @@
 {
   glClearColor(0.0, 0.0, 0.0, 0.0);
+  
+  /* world init, shouldnt be done here later */
   world = new World;
   (*world).initEnvironement();
   localPlayer = new Player;
+  localPlayer->setPosition(0.0, -10.0, 3.0);
   io = new InputOutput(world, localPlayer);
   (*world).addPlayer(localPlayer);
   Environment *env = new Environment;
   (*world).addEnv(env);
+  NPC* npc = new NPC;
+  npc->setPosition(3.0, 0.0, 3.0);
+  npc->setCollisionRadius(1.0);
+  world->addNPC(npc);
 
   glutSpecialFunc(specFunc); 
@@ -248,4 +255,7 @@
   /* increment the frames-per-second counter*/
   fps++;
+  /* check for collisions */
+  world->detectCollision();
+
   /* check for input to pass it over */
   if ( !pause && (rightWeGo || leftWeGo || upWeGo || downWeGo || shoot1)) {
Index: /orxonox/trunk/core/player.cc
===================================================================
--- /orxonox/trunk/core/player.cc	(revision 1898)
+++ /orxonox/trunk/core/player.cc	(revision 1899)
@@ -25,4 +25,5 @@
 
 Player::Player () {
+  // cout << "Player::Player" << endl;
   xCor = yCor = zCor = 0;
   shootLaser = new ShootLaser;
Index: /orxonox/trunk/core/player.h
===================================================================
--- /orxonox/trunk/core/player.h	(revision 1898)
+++ /orxonox/trunk/core/player.h	(revision 1899)
@@ -15,4 +15,12 @@
   ~Player ();
 
+  /* position of the spacecraft */
+  float xCor;
+  float yCor;
+  float zCor;
+
+  /* this player wanna shoot? so include a ref to ShootLaser */
+  ShootLaser* shootLaser;
+
   void setPosition(float x, float y, float z);
   void getPosition(float* x, float* y, float* z);
@@ -25,12 +33,6 @@
 
  private:
-  /* position of the spacecraft */
-  float xCor;
-  float yCor;
-  float zCor;
 
 
-  /* this player wanna shoot? so include a ref to ShootLaser */
-  ShootLaser* shootLaser;
 };
 
Index: /orxonox/trunk/core/shoot_laser.cc
===================================================================
--- /orxonox/trunk/core/shoot_laser.cc	(revision 1898)
+++ /orxonox/trunk/core/shoot_laser.cc	(revision 1899)
@@ -54,4 +54,5 @@
       /* fix1: weak boundaries check all four sides */
       /* fix2: conditions, that a struct tree can be cut off */
+      /* fix3: more efficent and nicer please */
       if (tmpShoot->yCor > 50) 
 	{
Index: /orxonox/trunk/core/shoot_laser.h
===================================================================
--- /orxonox/trunk/core/shoot_laser.h	(revision 1898)
+++ /orxonox/trunk/core/shoot_laser.h	(revision 1899)
@@ -24,4 +24,5 @@
     float collisionRadius;
   };
+  shoot* lastShoot;
 
   ShootLaser ();
@@ -34,5 +35,5 @@
 
  private:
-  shoot* lastShoot;
+
 };
 
Index: /orxonox/trunk/core/world.cc
===================================================================
--- /orxonox/trunk/core/world.cc	(revision 1898)
+++ /orxonox/trunk/core/world.cc	(revision 1899)
@@ -33,5 +33,4 @@
   lastNPC = null;
   lastEnv = null;
-  lastShoot = null;
 }
 
@@ -128,26 +127,5 @@
 
 
-/** 
-   \brief Add environmental object
-   \param player A reference to the new env object
-   
-   Add a new Environment to the world. Env has to be initialised before.
-*/
-bool World::addShoot(ShootLaser* shoot) 
-{
-  shootList* listMember = new shootList;
-  listMember->shoot = shoot;
-  if ( lastShoot != null ) 
-    {
-      listMember->number = lastShoot->number + 1;
-      listMember->next = lastShoot;
-    }
-  else 
-    {
-      listMember->number = 0;
-      listMember->next = null;
-    }
-  lastShoot = listMember;
-}
+
 
 
@@ -193,11 +171,5 @@
       tmpEnv = tmpEnv->next;
     }
-  /* now draw all the shoots (many) */
-  shootList* tmpShoot = lastShoot;
-  while( tmpShoot != null )
-    {
-      (*tmpShoot->shoot).drawShoot();
-      tmpShoot = tmpShoot->next;
-    }
+
   
   glColor3f(0.0, 1.0, 0.0);
@@ -255,4 +227,46 @@
 
 
+/* collision detection */
+/* fix: bad efficency: stupid brute force */
+
+void World::detectCollision() 
+{
+  float xOff, yOff, zOff, radius;
+  npcList* tmpNPC;
+
+  //cout << "World::detectCollsions" << endl;
+  /* first: check if any player's shoots trigger a collision */
+  playerList* tmpPlayer = lastPlayer;
+  Player* player = tmpPlayer->player;
+  while( tmpPlayer != null ) 
+    {
+      tmpNPC = lastNPC;
+      while( tmpNPC != null )
+	{
+	  radius = tmpNPC->npc->collisionRadius;
+	  ShootLaser::shoot* shoota = tmpPlayer->player->shootLaser->lastShoot;
+	  while( shoota != null )
+	    {
+	      xOff = shoota->xCor - tmpNPC->npc->xCor;
+	      yOff = shoota->yCor - tmpNPC->npc->yCor;
+	      zOff = shoota->zCor - tmpNPC->npc->zCor;
+	      if ( sqrt(xOff*xOff + yOff*yOff + zOff*zOff) < radius )
+		cout << "COLLISION " << endl;
+	      shoota = shoota->next;
+	    }
+	  tmpNPC = tmpNPC->next;
+	}
+      
+      tmpPlayer = tmpPlayer->next;
+    }
+
+  /* second: check if any player hits an enemy */
+
+  /* third: check if any enemy shoots a player */
+
+  //cout << "World::detectCollisions end" << endl;
+}
+
+
 
 /** 
Index: /orxonox/trunk/core/world.h
===================================================================
--- /orxonox/trunk/core/world.h	(revision 1898)
+++ /orxonox/trunk/core/world.h	(revision 1899)
@@ -6,4 +6,5 @@
 
 #include <stdlib.h>
+#include <cmath>
 
 #include "npc.h"
@@ -48,11 +49,5 @@
   envList* lastEnv;
 
-  /* a list of all shoot-amental objects */
-  struct shootList {
-    shootList* next;
-    ShootLaser* shoot;
-    int number;
-  };
-  shootList* lastShoot;
+
 
 
@@ -63,9 +58,9 @@
   bool removeNPC(NPC* npc);
   bool addEnv(Environment* env);
-  bool addShoot(ShootLaser* shoot);
 
   void drawWorld(void);
   void initEnvironement(void);
   void updateWorld(void);
+  void detectCollision(void);
   void testThaTest(void);
 
