Index: orxonox/trunk/src/story_entities/world.cc
===================================================================
--- orxonox/trunk/src/story_entities/world.cc	(revision 3690)
+++ orxonox/trunk/src/story_entities/world.cc	(revision 3708)
@@ -351,5 +351,5 @@
 	    tn->addChild(this->localCamera);
 	    //	    localCamera->lookAt(tn);
-	    this->localPlayer->setMode(PNODE_ALL);
+	    this->localPlayer->setMode(PNODE_ROTATE_MOVEMENT);
 	    //Vector* cameraOffset = new Vector (0, 5, -10);
 	    trackManager->condition(2, LEFTRIGHT, this->localPlayer);
Index: orxonox/trunk/src/world_entities/projectile.cc
===================================================================
--- orxonox/trunk/src/world_entities/projectile.cc	(revision 3690)
+++ orxonox/trunk/src/world_entities/projectile.cc	(revision 3708)
@@ -62,10 +62,10 @@
    tick function
 */
-void Projectile::setFlightDirection(Quaternion* flightDirection)
+void Projectile::setFlightDirection(Quaternion flightDirection)
 {
   if( this->flightDirection == NULL)
     this->flightDirection = new Vector();
   Vector v(1, 0, 0);
-  *this->flightDirection = flightDirection->apply(v);
+  *this->flightDirection = flightDirection.apply(v);
   this->flightDirection->normalize();
 }
@@ -89,5 +89,5 @@
 void Projectile::setSpeed(float speed)
 {
-  this->speed = speed * 3;
+  this->speed = speed * 3; /* fix speed settings */
   PRINTF(4)("Projectile::setting speed to: %f\n", this->speed);
 }
@@ -99,20 +99,13 @@
 void Projectile::tick (float time) 
 {
-  //this->speed = this->weapon->getSpeed(); 
-  Vector v;
-  v = *this->flightDirection * ( this->speed * time * 1000 + 0.7);
+  Vector v = *this->flightDirection * ( this->speed * time * 1000 + 0.7);
   this->shiftCoor(v);
-  //printf("PROJECTILE: current direction is:    (%f, %f, %f)\n",this->flightDirection->x, this->flightDirection->y, this->flightDirection->z );
-  //printf("PROJECTILE: current shift vector is: (%f, %f, %f)\n", v.x, v.y, v.z);
-  //printf("PROJECTILE: current speed is: %f\n", this->speed);
-  //printf("PROJECTILE: current dt is:    %f\n", time);
-  //this->debug();
 
   this->currentLifeTime += time;
   if( this->ttl < this->currentLifeTime)
     {
-      PRINTF(5)("FINALIZE=============================================================\n");
+      PRINTF(5)("FINALIZE==========================\n");
       PRINTF(5)("current life time is: %f/%f\n", this->currentLifeTime, this->ttl);
-      PRINTF(5)("FINALIZE=============================================================\n");
+      PRINTF(5)("FINALIZE===========================\n");
       this->finalize();
       this->currentLifeTime = 0.0f;
Index: orxonox/trunk/src/world_entities/projectile.h
===================================================================
--- orxonox/trunk/src/world_entities/projectile.h	(revision 3690)
+++ orxonox/trunk/src/world_entities/projectile.h	(revision 3708)
@@ -20,5 +20,5 @@
   virtual ~Projectile ();
 
-  void setFlightDirection(Quaternion* flightDirection);
+  void setFlightDirection(Quaternion flightDirection);
   void setSpeed(float speed);
   void setTTL(float ttl);
Index: orxonox/trunk/src/world_entities/test_bullet.cc
===================================================================
--- orxonox/trunk/src/world_entities/test_bullet.cc	(revision 3708)
+++ orxonox/trunk/src/world_entities/test_bullet.cc	(revision 3708)
@@ -0,0 +1,137 @@
+
+
+/* 
+   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 "simple_bullet.h"
+
+#include "world_entity.h"
+#include "weapon.h"
+#include "null_parent.h"
+#include "model.h"
+#include "vector.h"
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+*/
+SimpleBullet::SimpleBullet (Weapon* weapon) : WorldEntity()
+{}
+
+
+/**
+   \brief standard deconstructor
+*/
+SimpleBullet::~SimpleBullet () 
+{
+  /* 
+     do not delete the test projectModel, since it is pnode 
+     and will be cleaned out by world 
+  */
+  //delete this->projectileModel;
+}
+
+
+/**
+   \brief this sets the flight direction of the projectile
+   \param directin in which to flight
+
+   this function will calculate a vector out of this to be used in the
+   tick function
+*/
+void SimpleBullet::setFlightDirection(Quaternion flightDirection)
+{
+  if( this->flightDirection == NULL)
+    this->flightDirection = new Vector();
+  Vector v(1, 0, 0);
+  *this->flightDirection = flightDirection.apply(v);
+  this->flightDirection->normalize();
+}
+
+
+/**
+   \brief this sets the time to life of the projectile
+   \param ttl in second
+
+   after this life time, the projectile will garbage collect itself
+*/
+void SimpleBullet::setTTL(float ttl)
+{
+  this->ttl = ttl;
+}
+
+
+/**
+   \brief sets the speed of the projectile
+*/
+void SimpleBullet::setSpeed(float speed)
+{
+  this->speed = speed * 3; /* fix speed settings */
+  PRINTF(4)("SimpleBullet::setting speed to: %f\n", this->speed);
+}
+
+/**
+   \brief signal tick, time dependent things will be handled here
+   \param time since last tick
+*/
+void SimpleBullet::tick (float time) 
+{
+  Vector v = *this->flightDirection * ( this->speed * time * 1000 + 0.7);
+  this->shiftCoor(v);
+
+  this->currentLifeTime += time;
+  if( this->ttl < this->currentLifeTime)
+    {
+      PRINTF(5)("FINALIZE==========================\n");
+      PRINTF(5)("current life time is: %f/%f\n", this->currentLifeTime, this->ttl);
+      PRINTF(5)("FINALIZE===========================\n");
+      this->finalize();
+      this->currentLifeTime = 0.0f;
+    }
+}
+
+/**
+   \brief the projectile gets hit by another entity
+   \param the other entity
+   \param place where it is hit
+*/
+void SimpleBullet::hit (WorldEntity* entity, Vector* place) 
+{}
+
+
+/**
+   \brief the function gets called, when the projectile is destroyed
+*/
+void SimpleBullet::destroy () 
+{}
+
+
+void SimpleBullet::draw () 
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+
+  float matrix[4][4];  
+  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+  this->getAbsDir().matrix (matrix);
+  glMultMatrixf((float*)matrix);  
+  this->model->draw();
+
+  glPopMatrix();
+}
+
Index: orxonox/trunk/src/world_entities/test_bullet.h
===================================================================
--- orxonox/trunk/src/world_entities/test_bullet.h	(revision 3708)
+++ orxonox/trunk/src/world_entities/test_bullet.h	(revision 3708)
@@ -0,0 +1,42 @@
+/*! 
+    \projectile.h
+    \brief a projectile, that is been shooted by a weapon
+*/
+
+#ifndef _PROJECTILE_H
+#define _PROJECTILE_H
+
+#include "world_entity.h"
+
+class Vector;
+class Weapon;
+
+class Projectile : public WorldEntity 
+{
+  friend class World;
+
+ public:
+  Projectile (Weapon* weapon);
+  virtual ~Projectile ();
+
+  void setFlightDirection(Quaternion flightDirection);
+  void setSpeed(float speed);
+  void setTTL(float ttl);
+
+  virtual void hit (WorldEntity* weapon, Vector* loc);
+  virtual void destroy ();
+
+  virtual void tick (float time);
+  virtual void draw ();
+
+ private:
+  //physical attriutes like: force, speed, acceleration etc.
+  float speed;                         //!< this is the speed of the projectile
+  float currentLifeTime;               //!< this is the time, the projectile exists in this world (incremented by tick)
+  float ttl;                           //!< time to life, after this time, the projectile will garbage collect itself
+  Vector* flightDirection;             //!< direction in which the shoot flights
+  Weapon* weapon;                      //!< weapon the shoot belongs to
+  
+};
+
+#endif /* _PROJECTILE_H */
Index: orxonox/trunk/src/world_entities/test_gun.cc
===================================================================
--- orxonox/trunk/src/world_entities/test_gun.cc	(revision 3690)
+++ orxonox/trunk/src/world_entities/test_gun.cc	(revision 3708)
@@ -85,18 +85,14 @@
 {
   if( this->localTime < this->idleTime)
-    return;
-
+    {
+      this->weaponIdle();
+      return;
+    }
   Projectile* pj = new Projectile(this);
 
-  Vector* v = new Vector();
-  *v = this->getAbsCoor();
-  pj->setAbsCoor(v);
-  Quaternion* q = new Quaternion();
-  *q = this->getAbsDir();
-  pj->setAbsDir(q);
+  pj->setAbsCoor(this->getAbsCoor());
+  pj->setAbsDir(this->getAbsDir());
 
-  printf("%f\n",this->getSpeed());
-
-  pj->setFlightDirection(q);
+  pj->setFlightDirection(this->getAbsDir());
   pj->setSpeed(this->getSpeed());
 
