Index: trunk/src/world_entities/creatures/md2_creature.cc
===================================================================
--- trunk/src/world_entities/creatures/md2_creature.cc	(revision 6803)
+++ trunk/src/world_entities/creatures/md2_creature.cc	(revision 6804)
@@ -39,12 +39,4 @@
 
 CREATE_FACTORY(MD2Creature, CL_MD2_CREATURE);
-
-/**
- *  creates the controlable MD2Creature
- */
-MD2Creature::MD2Creature()
-{
-  this->init();
-}
 
 /**
@@ -231,9 +223,5 @@
 void MD2Creature::collidesWith(WorldEntity* entity, const Vector& location)
 {
-  if (entity->isA(CL_TURRET_POWER_UP) )
-  {
-    this->ADDWEAPON();
-    }
-//  PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z);
+
 }
 
@@ -254,4 +242,5 @@
 void MD2Creature::tick (float time)
 {
+  Playable::tick(time);
   if( likely(this->getModel(0) != NULL))
     ((MD2Model*)this->getModel(0))->tick(time);
@@ -284,8 +273,4 @@
   this->setAbsDir(mouseDirX);
   this->cameraConnNode.setRelDir(mouseDirY);
-
-  this->getWeaponManager()->tick(time);
-  // weapon system manipulation
-  this->weaponAction();
 }
 
@@ -348,14 +333,4 @@
 
 
-/**
- * weapon manipulation by the player
-*/
-void MD2Creature::weaponAction()
-{
-  if( this->bFire)
-    {
-      this->getWeaponManager()->fire();
-    }
-}
 
 /**
@@ -364,14 +339,9 @@
 void MD2Creature::process(const Event &event)
 {
+  Playable::process(event);
   if( event.type == SDLK_a)
       this->bStrafeL = event.bPressed;
   else if( event.type == SDLK_d)
       this->bStrafeR = event.bPressed;
-  else if( event.type == KeyMapper::PEV_FIRE1)
-      this->bFire = event.bPressed;
-  else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed)
-    this->getWeaponManager()->nextWeaponConfig();//if( !event.bPressed) this->bWeaponChange = !this->bWeaponChange;
-  else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed)
-    this->getWeaponManager()->previousWeaponConfig();
   else if( event.type == SDLK_w)
     this->bUp = event.bPressed; //this->shiftCoor(0,.1,0);
@@ -390,35 +360,2 @@
   }
 }
-
-#include "weapons/aiming_turret.h"
-// FIXME THIS MIGHT BE CONSIDERED EITHER A FEATURE, OR A BUG
-void MD2Creature::ADDWEAPON()
-{
-  Weapon* turret = NULL;
-
-  if ((float)rand()/RAND_MAX < .1)
-  {
-    //if (this->getWeaponManager()->hasFreeSlot(2, WTYPE_TURRET))
-    {
-      turret = new Turret();
-      this->getWeaponManager()->addWeapon(turret, 2);
-      this->getWeaponManager()->changeWeaponConfig(2);
-    }
-  }
-  else
-  {
-    //if (this->getWeaponManager()->hasFreeSlot(3))
-    {
-      turret = new AimingTurret();
-      this->getWeaponManager()->addWeapon(turret, 3);
-
-      this->getWeaponManager()->changeWeaponConfig(3);
-    }
-  }
-
-  if(turret != NULL)
-  {
-    turret->setName("Turret");
-    turret->setStateDuration(WS_SHOOTING, (float)rand()/RAND_MAX*.5+.1);
-  }
-}
Index: trunk/src/world_entities/creatures/md2_creature.h
===================================================================
--- trunk/src/world_entities/creatures/md2_creature.h	(revision 6803)
+++ trunk/src/world_entities/creatures/md2_creature.h	(revision 6804)
@@ -19,10 +19,8 @@
   public:
 
-    MD2Creature();
     MD2Creature(const char* fileName);
-    MD2Creature(const TiXmlElement* root);
+    MD2Creature(const TiXmlElement* root = NULL);
     virtual ~MD2Creature();
 
-    void init();
     virtual void loadParams(const TiXmlElement* root);
 
@@ -42,10 +40,7 @@
 
   private:
+    void init();
 
     void calculateVelocity(float time);
-    void weaponAction();
-
-    // !! temporary !!
-    void ADDWEAPON();
 
     bool                  bUp;                //!< up button pressed.
Index: trunk/src/world_entities/playable.cc
===================================================================
--- trunk/src/world_entities/playable.cc	(revision 6803)
+++ trunk/src/world_entities/playable.cc	(revision 6804)
@@ -38,4 +38,6 @@
   // the reference to the Current Player is NULL, because we dont have one at the beginning.
   this->currentPlayer = NULL;
+
+  this->bFire = false;
 
   this->setSynchronized(true);
@@ -201,4 +203,33 @@
 }
 
+/**
+ * @brief ticks a Playable
+ * @param dt: the passed time since the last Tick
+ */
+void Playable::tick(float dt)
+{
+  this->weaponMan->tick(dt);
+  if (this->bFire)
+    weaponMan->fire();
+}
+
+
+/**
+ * @brief processes Playable events.
+ * @param event the Captured Event.
+ */
+void Playable::process(const Event &event)
+{
+  if( event.type == KeyMapper::PEV_FIRE1)
+    this->bFire = event.bPressed;
+  else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed)
+  {
+    this->nextWeaponConfig();
+  }
+  else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed)
+    this->previousWeaponConfig();
+}
+
+
 
 void  Playable::attachCamera()
@@ -210,4 +241,6 @@
 
 
+
+
 void  Playable::detachCamera()
 {
Index: trunk/src/world_entities/playable.h
===================================================================
--- trunk/src/world_entities/playable.h	(revision 6803)
+++ trunk/src/world_entities/playable.h	(revision 6804)
@@ -25,5 +25,4 @@
 {
   public:
-    Playable();
     virtual ~Playable();
 
@@ -49,7 +48,7 @@
 
     virtual void collidesWith(WorldEntity* entity, const Vector& location);
-    virtual void process(const Event &event) = 0;
+    virtual void process(const Event &event);
 
-
+    virtual void tick(float dt);
 
     /** @return a List of Events in PEV_* sytle */
@@ -57,4 +56,6 @@
 
   protected:
+    Playable();
+
     void registerEvent(int eventType);
     void unregisterEvent(int eventType);
@@ -66,4 +67,6 @@
     Player*               currentPlayer;      //!< The Player currently connected to this Playable (the one that has controll) otherwise NULL
 
+    bool                  bFire;              //!< If the Ship is firing.
+
 };
 
Index: trunk/src/world_entities/space_ships/helicopter.cc
===================================================================
--- trunk/src/world_entities/space_ships/helicopter.cc	(revision 6803)
+++ trunk/src/world_entities/space_ships/helicopter.cc	(revision 6804)
@@ -124,21 +124,21 @@
 
   //cycle = 0.0;
-  
+
   // cameraissue
   this->cameraNode.setParent(this);
   this->cameraNode.setParentMode(PNODE_ALL);
-  
-  
+
+
   // rotors
   this->topRotor.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
   this->tailRotor.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-  
+
   this->topRotor.setParent(this);
   this->tailRotor.setParent(this);
-  
+
   this->topRotor.setRelCoor(Vector(-0.877,0.627,0));
   this->tailRotor.setRelCoor(Vector(-4.43,0.297,0.068));
   this->tailRotor.setAbsDir(Quaternion(M_PI_2,Vector(1,0,0)));
-  
+
   this->loadModel("models/ships/rotor.obj",1.0,3);
   this->loadModel("models/ships/rotor.obj",0.2,4);
@@ -274,4 +274,6 @@
 void Helicopter::tick (float time)
 {
+  Playable::tick(time);
+
   if( xMouse != 0 || yMouse != 0)
    {
@@ -281,9 +283,9 @@
     else if (yMouse < -controlVelocityY) yMouse = -controlVelocityY;
   }
-  
+
   // rotorrotation
   this->topRotor.shiftDir(Quaternion(time*10, Vector(0,1,0)));
   this->tailRotor.shiftDir(Quaternion(time*10, Vector(0,1,0)));
-  
+
   // spaceship controlled movement
   this->calculateVelocity(time);
@@ -293,5 +295,5 @@
   // this is the air friction (necessary for a smooth control)
   if(velocity.len() != 0) velocity -= velocity*0.1;
-  
+
   //travelSpeed = velocity.len();
 
@@ -301,5 +303,5 @@
   this->shiftCoor(getAbsDirY()*rotorspeed);
   */
-  
+
   /*
   //hoover effect
@@ -316,8 +318,4 @@
   this->shiftCoor (move);
   //this->shiftDir(Quaternion(-M_PI/4*tailrotorspeed, Vector(0,1,0)));
-
-  this->getWeaponManager()->tick(time);
-  // weapon system manipulation
-  this->weaponAction();
 }
 
@@ -338,5 +336,5 @@
      //this->shiftCoor(this->getAbsDirX());
      //accel -= this->getAbsDirY();
-     
+
      accel += Vector((this->getAbsDirX()).x,0,(this->getAbsDirX()).z);
      if((this->getAbsDirX()).y >= -0.1) rotValZ -= time;
@@ -351,5 +349,5 @@
      //this->shiftCoor((this->getAbsDirX())*-1);
      //accel -= this->getAbsDirY();
-     
+
      accel -= Vector((this->getAbsDirX()).x,0,(this->getAbsDirX()).z);
      rotValZ += time;
@@ -365,5 +363,5 @@
     //accel -= this->getAbsDirY();
     //velocityDir.normalize();
-    
+
     accel -= Vector((this->getAbsDirZ()).x,0,(this->getAbsDirZ()).z);
     rotValX -= time;
@@ -379,5 +377,5 @@
     //accel += this->getAbsDirY();
     //velocityDir.normalize();
-    
+
     accel += Vector((this->getAbsDirZ()).x,0,(this->getAbsDirZ()).z);
     rotValX += time;
@@ -446,5 +444,5 @@
 {
   WorldEntity::draw();
-  
+
   glMatrixMode(GL_MODELVIEW);
     glPushMatrix();
@@ -474,16 +472,4 @@
 }
 
-
-/**
- * weapon manipulation by the player
-*/
-void Helicopter::weaponAction()
-{
-  if( this->bFire)
-    {
-      this->getWeaponManager()->fire();
-    }
-}
-
 /**
  * @todo switch statement ??
@@ -491,5 +477,5 @@
 void Helicopter::process(const Event &event)
 {
-
+  Playable::process(event);
 
   if( event.type == KeyMapper::PEV_LEFT)
@@ -497,10 +483,4 @@
   else if( event.type == KeyMapper::PEV_RIGHT)
       this->bRight = event.bPressed;
-  else if( event.type == KeyMapper::PEV_FIRE1)
-      this->bFire = event.bPressed;
-  else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed)
-    this->getWeaponManager()->nextWeaponConfig();//if( !event.bPressed) this->bWeaponChange = !this->bWeaponChange;
-  else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed)
-    this->getWeaponManager()->previousWeaponConfig();
   else if( event.type == SDLK_e)
     this->bAscend = event.bPressed; //this->shiftCoor(0,.1,0);
@@ -517,8 +497,8 @@
 
     this->shiftDir(Quaternion(-M_PI/4*xMouse*mouseSensitivity, Vector(0,1,0)));
-    
+
     Quaternion yDir = Quaternion(-M_PI/4*yMouse*mouseSensitivity, Vector(0,0,1));
 
-    
+
     if ((this->cameraNode.getAbsDirY()).y < 0.5)
     {
Index: trunk/src/world_entities/space_ships/helicopter.h
===================================================================
--- trunk/src/world_entities/space_ships/helicopter.h	(revision 6803)
+++ trunk/src/world_entities/space_ships/helicopter.h	(revision 6804)
@@ -21,5 +21,4 @@
     virtual ~Helicopter();
 
-    void init();
     virtual void loadParams(const TiXmlElement* root);
 
@@ -40,6 +39,6 @@
 
   private:
+    void init();
     void calculateVelocity(float time);
-    void weaponAction();
 
     // !! temporary !!
@@ -63,8 +62,8 @@
     int                   controlVelocityY;
     //float                 cycle;              //!< hovercycle
-    
+
     PNode                 topRotor;
     PNode                 tailRotor;
-    
+
     PNode                 cameraNode;
 
Index: trunk/src/world_entities/space_ships/hover.cc
===================================================================
--- trunk/src/world_entities/space_ships/hover.cc	(revision 6803)
+++ trunk/src/world_entities/space_ships/hover.cc	(revision 6804)
@@ -252,6 +252,8 @@
  * @param time The timespan passed since last update
 */
-void Hover::tick (float time)
-{
+void Hover::tick (float dt)
+{
+  Playable::tick(dt);
+
   if( xMouse != 0 || yMouse != 0)
    {
@@ -263,7 +265,7 @@
 
   // spaceship controlled movement
-  this->calculateVelocity(time);
-
-  Vector move = (velocity)*time;
+  this->calculateVelocity(dt);
+
+  Vector move = (velocity)*dt;
 
   // this is the air friction (necessary for a smooth control)
@@ -271,7 +273,4 @@
   this->shiftCoor (move);
 
-  this->getWeaponManager()->tick(time);
-  // weapon system manipulation
-  this->weaponAction();
 }
 
@@ -400,5 +399,4 @@
 {
   Vector tmpRot;
-
   WorldEntity::draw();
 
@@ -463,5 +461,5 @@
 void Hover::process(const Event &event)
 {
-
+  Playable::process(event);
 
   if( event.type == KeyMapper::PEV_LEFT)
@@ -469,10 +467,4 @@
   else if( event.type == KeyMapper::PEV_RIGHT)
       this->bRight = event.bPressed;
-  else if( event.type == KeyMapper::PEV_FIRE1)
-      this->bFire = event.bPressed;
-  else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed)
-    this->getWeaponManager()->nextWeaponConfig();//if( !event.bPressed) this->bWeaponChange = !this->bWeaponChange;
-  else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed)
-    this->getWeaponManager()->previousWeaponConfig();
   else if( event.type == SDLK_e)
     this->bAscend = event.bPressed; //this->shiftCoor(0,.1,0);
Index: trunk/src/world_entities/space_ships/space_ship.cc
===================================================================
--- trunk/src/world_entities/space_ships/space_ship.cc	(revision 6803)
+++ trunk/src/world_entities/space_ships/space_ship.cc	(revision 6804)
@@ -306,7 +306,5 @@
 void SpaceShip::tick (float time)
 {
-  this->getWeaponManager()->tick(time);
-  // weapon system manipulation
-  this->weaponAction();
+  Playable::tick(time);
 
   if( ( xMouse != 0 || yMouse != 0 ) && this->getOwner() == this->getHostID() )
@@ -464,31 +462,14 @@
 
 /**
- * weapon manipulation by the player
-*/
-void SpaceShip::weaponAction()
-{
-  if( this->bFire)
-    {
-      this->getWeaponManager()->fire();
-    }
-}
-
-/**
  * @todo switch statement ??
  */
 void SpaceShip::process(const Event &event)
 {
+  Playable::process(event);
+
   if( event.type == KeyMapper::PEV_LEFT)
       this->bRollL = event.bPressed;
   else if( event.type == KeyMapper::PEV_RIGHT)
       this->bRollR = event.bPressed;
-  else if( event.type == KeyMapper::PEV_FIRE1)
-      this->bFire = event.bPressed;
-  else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed)
-  {
-    this->nextWeaponConfig();//if( !event.bPressed) this->bWeaponChange = !this->bWeaponChange;
-  }
-  else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed)
-    this->previousWeaponConfig();
   else if( event.type == KeyMapper::PEV_UP)
     this->bUp = event.bPressed; //this->shiftCoor(0,.1,0);
Index: trunk/src/world_entities/space_ships/space_ship.h
===================================================================
--- trunk/src/world_entities/space_ships/space_ship.h	(revision 6803)
+++ trunk/src/world_entities/space_ships/space_ship.h	(revision 6804)
@@ -27,5 +27,4 @@
     virtual ~SpaceShip();
 
-    void init();
     virtual void loadParams(const TiXmlElement* root);
 
@@ -47,7 +46,7 @@
 
   private:
+    void init();
 
     void calculateVelocity(float time);
-    void weaponAction();
 
     // !! temporary !!
