Index: /branches/playability/src/world_entities/playable.h
===================================================================
--- /branches/playability/src/world_entities/playable.h	(revision 9960)
+++ /branches/playability/src/world_entities/playable.h	(revision 9961)
@@ -117,11 +117,15 @@
   void unregisterEvent(int eventType);
 
+protected:
+  WeaponManager         weaponMan;          //!< the weapon manager: managing a list of weapon to wepaon-slot mapping
+  bool                  bFire;              //!< If the Ship is firing.
+  short                 supportedPlaymodes; //!< What Playmodes are Supported in this Playable.
+  Playable::Playmode    playmode;           //!< The current playmode.
+
 private:
-  WeaponManager         weaponMan;          //!< the weapon manager: managing a list of weapon to wepaon-slot mapping
   std::vector<int>      events;             //!< A list of Events, that are captured for this playable
 
   Player*               currentPlayer;      //!< The Player currently connected to this Playable (the one that has controll) otherwise NULL
 
-  bool                  bFire;              //!< If the Ship is firing.
   int                   oldFlags;           //!< Used for synchronisation
 
@@ -131,6 +135,4 @@
 
   bool                  bDead;
-  short                 supportedPlaymodes; //!< What Playmodes are Supported in this Playable.
-  Playable::Playmode    playmode;           //!< The current playmode.
 
   float                 enterRadius;        //!< How far one can be away from the Playable to enter it.
Index: /branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- /branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 9960)
+++ /branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 9961)
@@ -84,4 +84,8 @@
  */
 SpaceShip::SpaceShip(const std::string& fileName)
+    : primWeaponMan(this),
+    secWeaponMan(this),
+    supportedPlaymodes(Playable::Full3D || Playable::Horizontal || Playable::Vertical),
+    playmode(Playable::Full3D)
 {
   this->init();
@@ -104,4 +108,8 @@
 */
 SpaceShip::SpaceShip(const TiXmlElement* root)
+    : primWeaponMan(this),
+    secWeaponMan(this),
+    supportedPlaymodes(Playable::Full3D || Playable::Horizontal || Playable::Vertical),
+    playmode(Playable::Full3D)
 {
   this->init();
@@ -127,8 +135,19 @@
   Weapon* wpLeft = new TestGun(1);
   wpLeft->setName("testGun Left");
-  //Weapon* cannon = dynamic_cast<Weapon*>(Factory::fabricate(CL_CANNON));
-
-  //cannon->setName("BFG");
-
+
+  Weapon* cannon = new Cannon();
+  cannon->setName("BFG");
+
+
+  this->primWeaponMan.addWeapon( wpLeft, 1, 0);
+  this->primWeaponMan.addWeapon( wpRight, 1, 1);
+  this->secWeaponMan.addWeapon( cannon, 0, 6);
+
+  this->primWeaponMan.changeWeaponConfig(1);
+
+  wpRight->requestAction(WA_ACTIVATE);
+  wpLeft->requestAction(WA_ACTIVATE);
+  cannon->requestAction(WA_ACTIVATE);
+  /*
   this->addWeapon(wpLeft, 1, 0);
   this->addWeapon(wpRight,1 ,1);
@@ -136,6 +155,9 @@
 
   this->getWeaponManager().changeWeaponConfig(1);
-
-  bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = false;
+  */
+
+  this->loadModel("models/ships/hoverglider_mainbody.obj");
+
+  bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bPrimFire = bSecFire = false;
 
   xMouse = yMouse = 0;
@@ -183,26 +205,49 @@
   registerEvent(EV_MOUSE_MOTION);
 
-  this->getWeaponManager().setSlotCount(7);
-
-  this->getWeaponManager().setSlotPosition(0, Vector(-2.6, .1, -3.0));
-  this->getWeaponManager().setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
-
-  this->getWeaponManager().setSlotPosition(1, Vector(-2.6, .1, 3.0));
-  this->getWeaponManager().setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
-
-  this->getWeaponManager().setSlotPosition(2, Vector(-1.5, .5, -.5));
-  this->getWeaponManager().setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
-
-  this->getWeaponManager().setSlotPosition(3, Vector(-1.5, .5, .5));
-  this->getWeaponManager().setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
-
-  this->getWeaponManager().setSlotPosition(4, Vector(-1.5, -.5, .5));
-  this->getWeaponManager().setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
-
-  this->getWeaponManager().setSlotPosition(5, Vector(-1.5, -.5, -.5));
-  this->getWeaponManager().setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
+  this->primWeaponMan.setSlotCount(6);
+
+  this->primWeaponMan.setSlotPosition(0, Vector(-2.6, .1, -3.0));
+  this->primWeaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+
+  this->primWeaponMan.setSlotPosition(1, Vector(-2.6, .1, 3.0));
+  this->primWeaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+
+  this->primWeaponMan.setSlotPosition(2, Vector(-1.5, .5, -.5));
+  this->primWeaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
+
+  this->primWeaponMan.setSlotPosition(3, Vector(-1.5, .5, .5));
+  this->primWeaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
+
+  this->primWeaponMan.setSlotPosition(4, Vector(-1.5, -.5, .5));
+  this->primWeaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
+
+  this->primWeaponMan.setSlotPosition(5, Vector(-1.5, -.5, -.5));
+  this->primWeaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
   //
-  this->getWeaponManager().setSlotPosition(6, Vector(-1, 0.0, 0));
-  this->getWeaponManager().setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+  this->primWeaponMan.setSlotPosition(6, Vector(-1, 0.0, 0));
+  this->primWeaponMan.setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+
+  this->secWeaponMan.setSlotCount(6);
+
+  this->secWeaponMan.setSlotPosition(0, Vector(2.6, -0.5, 0));
+  this->secWeaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+
+  this->secWeaponMan.setSlotPosition(1, Vector(2.6, .1, 3.0));
+  this->secWeaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+
+  this->secWeaponMan.setSlotPosition(2, Vector(1.5, .5, -.5));
+  this->secWeaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
+
+  this->secWeaponMan.setSlotPosition(3, Vector(1.5, .5, .5));
+  this->secWeaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
+
+  this->secWeaponMan.setSlotPosition(4, Vector(1.5, -.5, .5));
+  this->secWeaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
+
+  this->secWeaponMan.setSlotPosition(5, Vector(1.5, -.5, -.5));
+  this->secWeaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
+  //
+  this->secWeaponMan.setSlotPosition(6, Vector(1, 0.0, 0));
+  this->secWeaponMan.setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
   //
   //   this->getWeaponManager().setSlotPosition(8, Vector(-2.5, -0.3, -2.0));
@@ -212,8 +257,11 @@
   //   this->getWeaponManager().setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));:
 
-  this->getWeaponManager().getFixedTarget()->setParent(this);
-  this->getWeaponManager().getFixedTarget()->setRelCoor(100000,0,0);
-
-  dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false);
+  this->primWeaponMan.getFixedTarget()->setParent(this);
+  this->primWeaponMan.getFixedTarget()->setRelCoor(100000,0,0);
+
+  this->secWeaponMan.getFixedTarget()->setParent(this);
+  this->secWeaponMan.getFixedTarget()->setRelCoor(100000,0,0);
+
+  dynamic_cast<Element2D*>(this->primWeaponMan.getFixedTarget())->setVisibility( false);
 
   this->burstEmitter = new DotEmitter(200, 0.0, .01);
@@ -330,5 +378,18 @@
 void SpaceShip::tick (float time)
 {
-  Playable::tick(time);
+  // Playable::tick(time);$
+
+  // Own Tick Setup, as a different fire routine is used on the weapon manager
+  this->primWeaponMan.tick(time);
+  this->secWeaponMan.tick(time);
+
+  if( this->bPrimFire)
+  {
+    this->primWeaponMan.fire();
+  }
+  if( this->bSecFire)
+  {
+    this->secWeaponMan.fire();
+  }
 
   if( ( xMouse != 0 || yMouse != 0 ) && this->getOwner() == SharedNetworkData::getInstance()->getHostID() )
@@ -489,4 +550,5 @@
   //rot.normalize();
   //this->setRelDirSoft(Quaternion(rotVal, rot), 5);
+
 }
 
@@ -496,5 +558,5 @@
 void SpaceShip::process(const Event &event)
 {
-  Playable::process(event);
+  //Playable::process(event);
 
   if( event.type == KeyMapper::PEV_LEFT)
@@ -506,10 +568,11 @@
   else if( event.type == KeyMapper::PEV_BACKWARD)
     this->bDown = event.bPressed; //this->shiftCoor(0,-.1,0);
+  else if( event.type == KeyMapper::PEV_FIRE2)
+    this->bSecFire = event.bPressed;
   else if( event.type == KeyMapper::PEV_FIRE1)
-    firedWeapon = curWeaponPrimary;
-  else if( event.type == KeyMapper::PEV_FIRE2)
-    firedWeapon = curWeaponSecondary;
+    this->bPrimFire = event.bPressed;
   else if( event.type == EV_MOUSE_MOTION)
   {
+
     this->xMouse += event.xRel;
     this->yMouse += event.yRel;
Index: /branches/playability/src/world_entities/space_ships/space_ship.h
===================================================================
--- /branches/playability/src/world_entities/space_ships/space_ship.h	(revision 9960)
+++ /branches/playability/src/world_entities/space_ships/space_ship.h	(revision 9961)
@@ -58,6 +58,4 @@
     inline float getElectronicMax() { return this->electronicMax; }; //!< returns current electronic value
 
-    inline int getFiredWeapon() { return this->firedWeapon; };      //!< returns index of the fired weapon
-
     //damage handler
     virtual void damage(float pDamage, float eDamage);  //!< pDamage physical damage, eDamage electronic damage
@@ -69,4 +67,11 @@
 
     void regen(float time);  //!< handler for shield and electronic regeneration
+
+    WeaponManager         primWeaponMan;      //!< the primary weapon manager: managing a list of energy weapons to wepaon-slot mapping
+    WeaponManager         secWeaponMan;       //!< the secondary weapon manager: managing a list of special weapons to weapon-slot mapping
+    short                 supportedPlaymodes; //!< What Playmodes are Supported in this Playable.
+    Playable::Playmode    playmode;           //!< The current playmode.
+    bool                  bPrimFire;
+    bool                  bSecFire;
 
     //ship atributes
@@ -99,7 +104,6 @@
 
 
-    int         curWeaponPrimary;   //!< current primary weapon
-    int         curWeaponSecondary; //!< current secondary weapon
-    int         firedWeapon;        //!< index of the fired weapon for the weapon manager
+    int         curWeaponPrimary;   //!< current primary weapon config 
+    int         curWeaponSecondary; //!< current secondary weapon config
 
     bool                  bUp;                //!< up button pressed.
Index: /branches/playability/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- /branches/playability/src/world_entities/weapons/weapon_manager.cc	(revision 9960)
+++ /branches/playability/src/world_entities/weapons/weapon_manager.cc	(revision 9961)
@@ -413,6 +413,6 @@
   for(int i = 0; i < this->slotCount; i++)
   {
-    firingWeapon = this->currentSlotConfig[i].currentWeapon;
-    if( firingWeapon != NULL) firingWeapon->requestAction(WA_SHOOT);
+	  firingWeapon = this->currentSlotConfig[i].currentWeapon;
+	  if( firingWeapon != NULL) firingWeapon->requestAction(WA_SHOOT);
   }
   this->crosshair->setRotationSpeed(500);
