Index: code/trunk/src/orxonox/objects/weaponSystem/WeaponSystem.cc
===================================================================
--- code/trunk/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2261)
+++ code/trunk/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2662)
@@ -37,4 +37,5 @@
 #include "WeaponSystem.h"
 
+
 /* WEAPONSYSTEM
  * creates the WeaponSystem and the ability to use weapons and munition
@@ -45,4 +46,6 @@
 namespace orxonox
 {
+    CreateFactory(WeaponSystem);
+
     WeaponSystem::WeaponSystem(BaseObject* creator) : BaseObject(creator)
     {
@@ -50,5 +53,5 @@
 
         this->activeWeaponSet_ = 0;
-        this->parentSpaceShip_ = 0;
+        this->parentPawn_ = 0;
     }
 
@@ -57,11 +60,41 @@
     }
 
-    //creates empty weaponSet
+    void WeaponSystem::attachWeaponPack(WeaponPack *wPack, unsigned int firemode)
+    {
+        if (firemode < this->weaponSets_.size())
+            this->weaponSets_[firemode]->attachWeaponPack(wPack);
+        this->weaponPacks_.push_back(wPack);
+    }
+
+    void WeaponSystem::attachWeaponSlot(WeaponSlot *wSlot)
+    {
+        wSlot->setParentWeaponSystem(this);
+        this->weaponSlots_.push_back(wSlot);
+    }
+
     void WeaponSystem::attachWeaponSet(WeaponSet *wSet)
     {
+        wSet->setParentWeaponSystem(this);
         this->weaponSets_.push_back(wSet);
-        wSet->setParentWeaponSystem(this);
     }
 
+    void WeaponSystem::setNewMunition(std::string munitionType, Munition * munitionToAdd)
+    {
+        this->munitionSet_[munitionType] = munitionToAdd;
+    }
+
+    //returns the Pointer to the munitionType
+    Munition * WeaponSystem::getMunitionType(std::string munitionType)
+    {
+//COUT(0) << "WeaponSystem::getMunitionType " << munitionType << std::endl;
+        std::map<std::string, Munition *>::const_iterator it = this->munitionSet_.find(munitionType);
+        if (it != this->munitionSet_.end())
+            return it->second;
+        else
+            return 0;
+    }
+
+
+/*
     //the first weaponSet is at n=0
     void WeaponSystem::setActiveWeaponSet(unsigned int n)
@@ -69,19 +102,33 @@
         if (n < this->weaponSets_.size())
             this->activeWeaponSet_ = this->weaponSets_[n];
+        else
+            this->activeWeaponSet_ = this->weaponSets_[0];
+    }
+*/
+
+
+    //n is the n'th weaponSet, starting with zero
+    //SpaceShip.cc only needs to have the keybinding to a specific Set-number n
+    void WeaponSystem::fire(WeaponMode::Enum n)
+    {
+        int set = 0;
+        switch (n)
+        {
+            case WeaponMode::fire:
+                set = 0;
+                break;
+            case WeaponMode::altFire:
+                set = 1;
+                break;
+            case WeaponMode::altFire2:
+                set = 2;
+                break;
+        }
+//COUT(0) << "WeaponSystem::fire" << std::endl;
+        if (set < (int)this->weaponSets_.size())
+//COUT(0) << "WeaponSystem::fire - after if" << std::endl;
+            this->weaponSets_[set]->fire();
     }
 
-    //n is the n'th weaponSet, starting with zero
-    //Spaceship.cc only needs to have the keybinding to a specific Set-number n
-    void WeaponSystem::fire(unsigned int n)
-    {
-        if (n < this->weaponSets_.size())
-            this->weaponSets_[n]->fire();
-    }
-
-    void WeaponSystem::fire()
-    {
-        if (this->activeWeaponSet_)
-            this->activeWeaponSet_->fire();
-    }
 
     WeaponSet * WeaponSystem::getWeaponSetPointer(unsigned int n)
@@ -93,7 +140,23 @@
     }
 
+    WeaponSlot * WeaponSystem::getWeaponSlotPointer(unsigned int n)
+    {
+        if (n < this->weaponSlots_.size())
+            return this->weaponSlots_[n];
+        else
+            return 0;
+    }
+
+    WeaponPack * WeaponSystem::getWeaponPackPointer(unsigned int n)
+    {
+        if (n < this->weaponPacks_.size())
+            return this->weaponPacks_[n];
+        else
+            return 0;
+    }
+
     void WeaponSystem::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
-
+        SUPER(WeaponSystem, XMLPort, xmlelement, mode);
     }
 
