Index: code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/CMakeLists.txt
===================================================================
--- code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/CMakeLists.txt	(revision 2969)
+++ code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/CMakeLists.txt	(revision 2979)
@@ -2,4 +2,8 @@
   FusionFire.cc
   LaserFire.cc
+<<<<<<< .mine
+  HsW01.cc
+=======
   LightningGun.cc
+>>>>>>> .r2978
 )
Index: code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/HsW01.cc
===================================================================
--- code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/HsW01.cc	(revision 2969)
+++ code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/HsW01.cc	(revision 2979)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      Martin Polak
+ *      Hagen Seifert
  *   Co-authors:
  *      ...
@@ -32,4 +32,11 @@
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
+#include "objects/weaponsystem/projectiles/ParticleProjectile.h"
+#include "objects/worldentities/Model.h"
+#include "objects/worldentities/MuzzleFlash.h"
+
+#include "objects/weaponsystem/Weapon.h"
+#include "objects/weaponsystem/WeaponPack.h"
+#include "objects/weaponsystem/WeaponSystem.h"
 
 namespace orxonox
@@ -37,43 +44,78 @@
     CreateFactory(HsW01);
 
-    HsW01::HsW01(BaseObject* creator) : Weapon(creator)
+    HsW01::HsW01(BaseObject* creator) : WeaponMode(creator)
     {
         RegisterObject(HsW01);
 
-        this->speed_ = 1250;
+        this->reloadTime_ = 0.25;
+        this->damage_ = 15;
+        this->speed_ = 2500;
+        this->delay_ = 0;
+        this->setMunitionName("HsW01");
+
+        this->delayTimer_.setTimer(1.0f, false, this, createExecutor(createFunctor(&HsW01::shot)));
+        this->delayTimer_.stopTimer();
+    }
+
+    void HsW01::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(HsW01, XMLPort, xmlelement, mode);
+
+        XMLPortParam(HsW01, "delay", setDelay, getDelay, xmlelement, mode);
+        XMLPortParam(HsW01, "material", setMaterial, getMaterial, xmlelement, mode);
 
     }
 
-    HsW01::~HsW01()
+    void HsW01::setMaterial(const std::string& material)
     {
+        this->material_ = material;
     }
 
-    void HsW01::reloadBullet()
+    std::string& HsW01::getMaterial()
     {
-        this->bulletTimer(this->bulletLoadingTime_);
+        return this->material_;
     }
 
-    void HsW01::reloadMagazine()
+    void HsW01::setDelay(float d)
     {
-        this->magazineTimer(this->magazineLoadingTime_);
+        this->delay_ = d;
+        this->delayTimer_.setInterval(this->delay_);
     }
 
-    void HsW01::takeBullets()
+    float HsW01::getDelay() const
     {
-        this->munition_->removeBullets(1);
+        return this->delay_;
     }
 
-    void HsW01::takeMagazines()
+    void HsW01::fire()
     {
-        this->munition_->removeMagazines(1);
+        this->delayTimer_.startTimer();
     }
 
-    void HsW01::createProjectile()
+    void HsW01::muendungsfeuer()
     {
-        BillboardProjectile* projectile = new ParticleProjectile(this);
-        projectile->setOrientation(this->getWorldOrientation());
-        projectile->setPosition(this->getWorldPosition());
-        projectile->setVelocity(this->getWorldOrientation() * WorldEntity::FRONT * this->speed_);
-        projectile->setOwner(this->getWeaponSystem()->getPawn());
+        MuzzleFlash *muzzleFlash = new MuzzleFlash(this);
+        this->getWeapon()->attach(muzzleFlash);
+        muzzleFlash->setPosition(this->getMuzzleOffset());
+        muzzleFlash->setMaterial(this->material_);
+    }
+
+    void HsW01::shot()
+    {
+        Projectile* projectile = new Projectile(this);
+	Model* model = new Model(projectile);
+	model->setMeshSource("laserbeam.mesh");
+	model->setCastShadows(false);
+	projectile->attach(model);
+	model->setScale(5);
+
+        projectile->setOrientation(this->getMuzzleOrientation());
+        projectile->setPosition(this->getMuzzlePosition());
+        projectile->setVelocity(this->getMuzzleDirection() * this->speed_);
+
+        projectile->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
+        projectile->setDamage(this->getDamage());
+
+        HsW01::muendungsfeuer();
     }
 }
Index: code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/HsW01.h
===================================================================
--- code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/HsW01.h	(revision 2969)
+++ code/branches/weapons/src/orxonox/objects/weaponsystem/weaponmodes/HsW01.h	(revision 2979)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      Martin Polak
+ *      Hagen Seifert
  *   Co-authors:
  *      ...
@@ -31,30 +31,30 @@
 
 #include "OrxonoxPrereqs.h"
-
-#include "core/BaseObject.h"
-
-#include "../munitions/LaserGunMunition.h"
-#include "util/Math.h"
-#include "../Weapon.h"
-#include "../projectiles/BillboardProjectile.h"
-#include "../projectiles/ParticleProjectile.h"
+#include "objects/weaponsystem/WeaponMode.h"
+#include "tools/Timer.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport HsW01 : public Weapon
+    class _OrxonoxExport HsW01 : public WeaponMode
     {
         public:
             HsW01(BaseObject* creator);
-            virtual ~HsW01();
+            virtual ~HsW01() {}
 
-            virtual void takeBullets();
-            virtual void takeMagazines();
-            virtual void createProjectile();
-            virtual void reloadBullet();
-            virtual void reloadMagazine();
+            virtual void fire();
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
         private:
+            void setMaterial(const std::string& material);
+            std::string& getMaterial();
+            void setDelay(float d);
+            float getDelay() const;
+            void shot();
+            void muendungsfeuer();
+
+            std::string material_;
             float speed_;
-
+            float delay_;
+            Timer<HsW01> delayTimer_;
     };
 }
