Index: code/trunk/src/modules/objects/ForceField.h
===================================================================
--- code/trunk/src/modules/objects/ForceField.h	(revision 7601)
+++ code/trunk/src/modules/objects/ForceField.h	(revision 7673)
@@ -23,5 +23,5 @@
  *      Aurelian Jaggi
  *   Co-authors:
- *      ...
+ *      Damian 'Mozork' Frick
  *
  */
@@ -31,4 +31,10 @@
     @brief Definition of the ForceField class.
     @ingroup Objects
+*/
+
+/**
+@file ForceField.h
+@brief Definition of the ForceField class.
+@inGroup Objects
 */
 
@@ -43,34 +49,80 @@
 namespace orxonox
 {
+
+    /**
+    @brief
+        The mode of the ForceField.
+    
+    @inGroup Objects
+    */
+    namespace ForceFieldMode
+    {
+        enum Value {
+            tube, //!< The ForceField has a tube shape.
+            sphere //!< The ForceField has a spherical shape.
+            
+        };
+    }
+
+    /**
+    @brief
+        Implements a force field, that applies a force to any @ref orxonox::MoblieEnity "MobileEntity" that enters its range.
+        
+        The following parameters can be set to specify the behavior of the ForceField.
+        - @b velocity The amount of force the ForceField excerts.
+        - @b diameter The diameter of the ForceField.
+        - @b length The length of the ForceField.
+        - @b mode The mode the ForceField is in. For mode:
+        -- <em>tube</em> A ForceField which exerts force only in the direction it is oriented. The force is only exerted on objects that are in a tube of length <em>length</em> and diameter <em>diameter</em>. The magintude of the force is proportional to the <em><velocity/em>, being highest when an object is in the middle of the tube (radius-wise), linearly decreasing with greater radii and finally reaching zero, when the object is <code>diameter/2</code> away from the orientation vector.
+        -- <em>sphere</em> A Force Field which exerts force radially away from itself, with the greatest magnitude (proportional to <em>velocity</em>) being in the origin of the ForceField, linearly decreasing with respect to the distance to the origin and finally reaching zero at distance <code>diameter/2</code>.
+        
+    @author
+        Aurelian Jaggi
+        
+    @author
+        Damian 'Mozork' Frick
+        
+    @inGroup Objects
+    */
     class _ObjectsExport ForceField : public StaticEntity, public Tickable
     {
-    public:
-        ForceField(BaseObject* creator);
-        virtual ~ForceField();
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-        virtual void tick(float dt);
+        public:
+            ForceField(BaseObject* creator);
+            virtual ~ForceField();
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt);
 
-        inline void setVelocity(float vel)
-            { this->velocity_ = vel; }
+            inline void setVelocity(float vel)
+                { this->velocity_ = vel; }
 
-        inline float getVelocity()
-            { return velocity_; }
+            inline float getVelocity()
+                { return this->velocity_; }
 
-        inline void setDiameter(float diam)
-            { this->diameter_ = diam; }
+            inline void setDiameter(float diam)
+                { this->diameter_ = diam; this->radius_ = diam/2; }
 
-        inline float getDiameter()
-            { return diameter_; }
+            inline float getDiameter()
+                { return this->diameter_; }
 
-        inline void setLength(float l)
-            { this->length_ = l; }
+            inline void setLength(float l)
+                { this->length_ = l; this->halfLength_ = l/2; }
 
-        inline float getLength()
-            { return length_; }
+            inline float getLength()
+                { return this->length_; }
+                
+            void setMode(const std::string& mode);
+                
+            inline const std::string& getMode(void);
 
-    private:
-        float velocity_;
-        float diameter_;
-        float length_;
+        private:
+            static const std::string modeStringTube_s;
+            static const std::string modeStringSphere_s;
+        
+            float velocity_;
+            float diameter_;
+            float radius_;
+            float length_;
+            float halfLength_;
+            ForceFieldMode::Value mode_;
   };
 }
