Index: branches/playability/src/world_entities/weapons/heavy_blaster.cc
===================================================================
--- branches/playability/src/world_entities/weapons/heavy_blaster.cc	(revision 10133)
+++ branches/playability/src/world_entities/weapons/heavy_blaster.cc	(revision 10136)
@@ -67,4 +67,7 @@
   this->setProjectileTypeC("HBolt");   // FIXME temp project type until the blaste class exist
   this->prepareProjectiles(5);
+
+  this->setBarrels(3);
+  this->setSegs(2);
 
   this->objComp1 = new PNode;
@@ -75,41 +78,41 @@
   this->objComp6 = new PNode;
 
-  Animation3D* animB0Shoot = this->getAnimation(WS_SHOOTING, this->objComp1);
-  Animation3D* animB1Shoot = this->getAnimation(WS_SHOOTING, this->objComp2);
-  Animation3D* animB2Shoot = this->getAnimation(WS_SHOOTING, this->objComp3);
-  Animation3D* animT0Shoot = this->getAnimation(WS_SHOOTING, this->objComp4);
-  Animation3D* animT1Shoot = this->getAnimation(WS_SHOOTING, this->objComp5);
-  Animation3D* animT2Shoot = this->getAnimation(WS_SHOOTING, this->objComp6);
+  Animation3D* animB0Shoot = this->getAnimation(WS_SHOOTING0, this->objComp1);
+//   Animation3D* animB1Shoot = this->getAnimation(WS_SHOOTING1, this->objComp2);
+//   Animation3D* animB2Shoot = this->getAnimation(WS_SHOOTING2, this->objComp3);
+//   Animation3D* animT0Shoot = this->getAnimation(WS_SHOOTING3, this->objComp4);
+//   Animation3D* animT1Shoot = this->getAnimation(WS_SHOOTING4, this->objComp5);
+//   Animation3D* animT2Shoot = this->getAnimation(WS_SHOOTING5, this->objComp6);
 
   animB0Shoot->setInfinity(ANIM_INF_CONSTANT);
-  animB1Shoot->setInfinity(ANIM_INF_CONSTANT);
-  animB2Shoot->setInfinity(ANIM_INF_CONSTANT);
-  animT0Shoot->setInfinity(ANIM_INF_CONSTANT);
-  animT1Shoot->setInfinity(ANIM_INF_CONSTANT);
-  animT2Shoot->setInfinity(ANIM_INF_CONSTANT);
-
-  animB0Shoot->addKeyFrame(Vector(0.1, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animB0Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animB0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
-
-  animT0Shoot->addKeyFrame(Vector(0.14, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animT0Shoot->addKeyFrame(Vector(-0.14, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animT0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
-
-  animB1Shoot->addKeyFrame(Vector(0.1, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animB1Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
+//   animB1Shoot->setInfinity(ANIM_INF_CONSTANT);
+//   animB2Shoot->setInfinity(ANIM_INF_CONSTANT);
+//   animT0Shoot->setInfinity(ANIM_INF_CONSTANT);
+//   animT1Shoot->setInfinity(ANIM_INF_CONSTANT);
+//   animT2Shoot->setInfinity(ANIM_INF_CONSTANT);
+
+  animB0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+  animB0Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+  animB0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+/*
+  animT0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+  animT0Shoot->addKeyFrame(Vector(-0.04, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+  animT0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);*/
+/*
+  animB1Shoot->addKeyFrame(Vector(0.1, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+  animB1Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
   animB1Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
 
-  animT1Shoot->addKeyFrame(Vector(0.14, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animT1Shoot->addKeyFrame(Vector(-0.14, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
+  animT1Shoot->addKeyFrame(Vector(0.04, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+  animT1Shoot->addKeyFrame(Vector(-0.04, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
   animT1Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
 
-  animB2Shoot->addKeyFrame(Vector(0.1, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animB2Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
+  animB2Shoot->addKeyFrame(Vector(0.1, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+  animB2Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
   animB2Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
 
-  animT2Shoot->addKeyFrame(Vector(0.14, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animT2Shoot->addKeyFrame(Vector(-0.14, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
-  animT2Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
+  animT2Shoot->addKeyFrame(Vector(0.04, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+  animT2Shoot->addKeyFrame(Vector(-0.04, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+  animT2Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);*/
 
   Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
@@ -175,8 +178,15 @@
 
   glPushMatrix();
-  glTranslatef (this->objComp1->getAbsCoor().x, this->objComp1->getAbsCoor().y, this->objComp1->getAbsCoor().z);
-  static_cast<StaticModel*>(this->getModel())->draw(1);
-  static_cast<StaticModel*>(this->getModel())->draw(2);
-  static_cast<StaticModel*>(this->getModel())->draw(0);
+    glTranslatef (this->objComp1->getAbsCoor().x, this->objComp1->getAbsCoor().y, this->objComp1->getAbsCoor().z);
+    static_cast<StaticModel*>(this->getModel())->draw(1);
+    static_cast<StaticModel*>(this->getModel())->draw(2);
+    static_cast<StaticModel*>(this->getModel())->draw(0);
+
+    glPushMatrix();
+      glTranslatef (this->objComp4->getAbsCoor().x, this->objComp4->getAbsCoor().y, this->objComp4->getAbsCoor().z);
+      static_cast<StaticModel*>(this->getModel())->draw(4);
+      static_cast<StaticModel*>(this->getModel())->draw(5);
+      static_cast<StaticModel*>(this->getModel())->draw(3);
+    glPopMatrix();
   glPopMatrix();
 /*
@@ -190,10 +200,11 @@
   static_cast<StaticModel*>(this->getModel())->draw(0);
   glPopMatrix();*/
-/*
-  glTranslatef (this->objComp4->getAbsCoor().x, this->objComp4->getAbsCoor().y, this->objComp4->getAbsCoor().z);
-  static_cast<StaticModel*>(this->getModel())->draw(4);
-  static_cast<StaticModel*>(this->getModel())->draw(5);
-  static_cast<StaticModel*>(this->getModel())->draw(3);
-  glPopMatrix();*/
+
+//   glPushMatrix();
+//   glTranslatef (this->objComp4->getAbsCoor().x, this->objComp4->getAbsCoor().y, this->objComp4->getAbsCoor().z);
+//   static_cast<StaticModel*>(this->getModel())->draw(4);
+//   static_cast<StaticModel*>(this->getModel())->draw(5);
+//   static_cast<StaticModel*>(this->getModel())->draw(3);
+//   glPopMatrix();
 /*
   glPushMatrix();
Index: branches/playability/src/world_entities/weapons/weapon.cc
===================================================================
--- branches/playability/src/world_entities/weapons/weapon.cc	(revision 10133)
+++ branches/playability/src/world_entities/weapons/weapon.cc	(revision 10136)
@@ -308,4 +308,23 @@
     {
       PRINTF(2)("Node not defined for the Creation of the 3D-animation of state %s\n", stateToChar(state));
+      return NULL;
+    }
+  }
+  else
+    return this->animation[state];
+}
+
+Animation3D* Weapon::getAnimation(ShootingStates state, PNode* node)
+{
+  if (state >= WS_SS_MAX) // if the state is not known
+    return NULL;
+
+  if (unlikely(this->animation[state] == NULL)) // if the animation does not exist yet create it.
+  {
+    if (likely(node != NULL))
+      return this->animation[state] = new Animation3D(node);
+    else
+    {
+//       PRINTF(2)("Node not defined for the Creation of the 3D-animation of state %s\n", stateToChar(state));
       return NULL;
     }
Index: branches/playability/src/world_entities/weapons/weapon.h
===================================================================
--- branches/playability/src/world_entities/weapons/weapon.h	(revision 10133)
+++ branches/playability/src/world_entities/weapons/weapon.h	(revision 10136)
@@ -55,4 +55,18 @@
   WS_STATE_COUNT  =     8     //!< This must match the count of enumerations-members.
 } WeaponState;
+
+typedef enum
+{
+  WS_SHOOTING0    = 0x00000001, //!< Fireing 1st Barrel
+  WS_SHOOTING1    = 0x00000002, //!< Fireing 2nd Barrel
+  WS_SHOOTING2    = 0x00000004, //!< Fireing 3rd Barrel
+  WS_SHOOTING3    = 0x00000008, //!< Fireing 4st Barrel
+  WS_SHOOTING4    = 0x00000010, //!< Fireing 5st Barrel
+  WS_SHOOTING5    = 0x00000020, //!< Fireing 6st Barrel
+  WS_SHOOTING6    = 0x00000040, //!< Fireing 7st Barrel
+  WS_SHOOTING7    = 0x00000080, //!< Fireing 8st Barrel
+
+  WS_SS_MAX       = 0x000000ff
+}ShootingStates;
 
 //! an enumerator defining capabilities of a WeaponSlot
@@ -158,4 +172,5 @@
 
     Animation3D* getAnimation(WeaponState state, PNode* node = NULL);
+    Animation3D* getAnimation(ShootingStates state, PNode* node = NULL);
     Animation3D* copyAnimation(WeaponState from, WeaponState to);
 
@@ -186,4 +201,10 @@
     static WeaponState   charToState(const std::string& state);
     static const char*   stateToChar(WeaponState state);
+
+
+    inline int getBarrels() {return this->barrels; };
+    inline int getSeg() {return this->segs; };
+    inline void setBarrels(int barrels) { this->barrels = barrels; };
+    inline void setSegs(int segs) { this->segs = segs; };
 
   private:
@@ -239,4 +260,7 @@
     ClassID                projectile;                      //!< the projectile used for this weapon (since they should be generated via macro and the FastFactory, only the ClassID must be known.)
     FastFactory*           projectileFactory;               //!< A factory, that produces and handles the projectiles.
+
+    int                    barrels;                         //!< # of barrels
+    int                    segs;                             //!< # of segments, one barrel has
   };
 
