Index: code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.cc
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.cc	(revision 12274)
+++ code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.cc	(revision 12284)
@@ -21,7 +21,7 @@
  *
  *   Author:
- *      Joel Smely
+ *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      simonmie
  *
  */
@@ -34,7 +34,10 @@
 #include "HoverGunProjectile.h"
 
+#include "core/config/ConfigValueIncludes.h"
 #include "core/CoreIncludes.h"
+#include "core/GameMode.h"
 #include "core/command/Executor.h"
-#include "util/Convert.h"
+
+#include "worldentities/pawns/Pawn.h"
 
 namespace orxonox
@@ -42,46 +45,48 @@
     RegisterClass(HoverGunProjectile);
 
-    HoverGunProjectile::HoverGunProjectile(Context* context) : BillboardProjectile(context)
+    HoverGunProjectile::HoverGunProjectile(Context* context) : MovableEntity(context), BasicProjectile()
     {
         RegisterObject(HoverGunProjectile);
 
-        this->textureIndex_ = 1;
-        this->setMass(0.1f);
-        this->setCollisionType(CollisionType::Dynamic);
-        this->maxTextureIndex_ = 8;
-        this->textureTimer_.setTimer(0.01f, true, createExecutor(createFunctor(&HoverGunProjectile::changeTexture, this)));
+        this->setConfigValues();
 
-        registerVariables();
+        // Get notification about collisions
+        if (GameMode::isMaster())
+        {
+            this->setMass(0.0000000001f);
+            this->enableCollisionCallback();
+            this->setCollisionResponse(false);
+            this->setCollisionType(CollisionType::Dynamic);
+
+            // Create a sphere collision shape and attach it to the projectile.
+            collisionShape_ = new SphereCollisionShape(this->getContext());
+            setCollisionShapeRadius(2.0f);
+            this->attachCollisionShape(collisionShape_);
+
+            this->destroyTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&BasicProjectile::destroyObject, this)));
+        }
     }
 
-    void HoverGunProjectile::registerVariables()
+    HoverGunProjectile::~HoverGunProjectile()
     {
-        registerVariable(this->materialBase_);
     }
 
-    /**
-    @brief
-        Set the material.
-    @param material
-        The name of the material. Material names with 1 to 8 appended must exist.
-    */
-    void HoverGunProjectile::setMaterial(const std::string& material)
+    void HoverGunProjectile::setConfigValues()
     {
-        this->materialBase_ = material;
-
-        BillboardProjectile::setMaterial(material + multi_cast<std::string>(this->textureIndex_));
+        SetConfigValue(lifetime_, 4.0f).description("The time in seconds a projectile stays alive");
     }
 
-    /**
-    @brief
-        Change the texture.
-    */
-    void HoverGunProjectile::changeTexture()
+
+    bool HoverGunProjectile::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint)
     {
-        this->textureIndex_++;
-        if (this->textureIndex_ > this->maxTextureIndex_)
-            this->textureIndex_ = 1;
+        return this->processCollision(otherObject, contactPoint, cs);
+    }
 
-        this->setMaterial(this->materialBase_);
+    void HoverGunProjectile::setCollisionShapeRadius(float radius)
+    {
+        if (collisionShape_ != nullptr && radius > 0)
+        {
+            collisionShape_->setRadius(radius);
+        }        
     }
 }
Index: code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.h
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.h	(revision 12274)
+++ code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.h	(revision 12284)
@@ -21,7 +21,7 @@
  *
  *   Author:
- *      Joel Smely
+ *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      simonmie
  *
  */
@@ -37,7 +37,9 @@
 #include "weapons/WeaponsPrereqs.h"
 
-#include <string>
 #include "tools/Timer.h"
-#include "BillboardProjectile.h"
+#include "worldentities/MovableEntity.h"
+#include "objects/collisionshapes/SphereCollisionShape.h"
+
+#include "BasicProjectile.h"
 
 namespace orxonox
@@ -46,61 +48,32 @@
     /**
     @brief
-        The HoverGunProjectile is a projectile that is represented by a looped series of billboards.
-        
+        Represents all 'standard' projectiles.
+
     @author
-        Joel Smely
+        Fabian 'x3n' Landau
+    @author
+        Simon Miescher
     @ingroup WeaponsProjectiles
     */
-    class _WeaponsExport HoverGunProjectile : public BillboardProjectile
+    class _WeaponsExport HoverGunProjectile : public MovableEntity, public BasicProjectile
     {
         public:
             HoverGunProjectile(Context* context);
-            virtual ~HoverGunProjectile() {}
+            virtual ~HoverGunProjectile();
 
-            virtual void setMaterial(const std::string& material) override;
+            void setConfigValues();
 
-/**
-    @file LightningGunProjectile.h
-    @brief Definition of the LightningGunProjectile class.
-*/
+           
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
 
-#ifndef _HoverGunProjectile_H__
-#define _HoverGunProjectile_H__
-
-#include "weapons/WeaponsPrereqs.h"
-
-#include <string>
-#include "tools/Timer.h"
-#include "BillboardProjectile.h"
-
-namespace orxonox
-{
-
-    /**
-    @brief
-        The LightningGunProjectile is a projectile that is represented by a looped series of billboards.
-        
-    @author
-        Joel Smely
-    @ingroup WeaponsProjectiles
-    */
-    class _WeaponsExport HoverGunProjectile : public BillboardProjectile
-    {
-        public:
-            HoverGunProjectile(Context* context);
-            virtual ~HoverGunProjectile() {}
-
-            virtual void setMaterial(const std::string& material) override;
+        protected:
+            virtual void setCollisionShapeRadius(float radius);
+            float lifetime_; //!< The time the projectile exists.
 
         private:
-            void registerVariables();
-            void changeTexture();
-            
-            unsigned int textureIndex_; //!< The current index of the texture. (i.e. the index of the currently displayed texture)
-            unsigned int maxTextureIndex_; //!< The maximal index.
-            Timer textureTimer_; //!< A timer that loops and changes textures each time it expires.
-            std::string materialBase_; //!< The base name of the material.
+            Timer destroyTimer_; //!< Timer to destroy the projectile after its lifetime has run out.
+            WeakPtr<SphereCollisionShape> collisionShape_; // The collision shape of the projectile.
     };
 }
 
-#endif /* _HoverGunProjectile_H__ */
+#endif /* _Projectile_H__ */
