Index: orxonox/branches/physics/src/Makefile.am
===================================================================
--- orxonox/branches/physics/src/Makefile.am	(revision 4183)
+++ orxonox/branches/physics/src/Makefile.am	(revision 4184)
@@ -93,4 +93,6 @@
 		 util/physics/fields/field.cc \
 		 util/physics/fields/gravity.cc \
+		 util/physics/fields/point_gravity.cc \
+		 util/physics/fields/twirl.cc \
 		 lib/math/vector.cc \
 		 lib/math/curve.cc \
@@ -165,6 +167,9 @@
 		 util/physics/physical_interaction_asym.h \
 		 util/physics/physics_connection.h \
+		 util/physics/fields/fields.h \
 		 util/physics/fields/field.h \
 		 util/physics/fields/gravity.h \
+		 util/physics/fields/point_gravity.h \
+		 util/physics/fields/twirl.h \
 		 lib/util/ini_parser.h \
 		 lib/math/vector.h \
Index: orxonox/branches/physics/src/Makefile.in
===================================================================
--- orxonox/branches/physics/src/Makefile.in	(revision 4183)
+++ orxonox/branches/physics/src/Makefile.in	(revision 4184)
@@ -93,6 +93,7 @@
 	physical_interaction_asym.$(OBJEXT) \
 	physics_connection.$(OBJEXT) field.$(OBJEXT) gravity.$(OBJEXT) \
-	vector.$(OBJEXT) curve.$(OBJEXT) glmenu_imagescreen.$(OBJEXT) \
-	tinyxml.$(OBJEXT) tinystr.$(OBJEXT) tinyxmlerror.$(OBJEXT) \
+	point_gravity.$(OBJEXT) twirl.$(OBJEXT) vector.$(OBJEXT) \
+	curve.$(OBJEXT) glmenu_imagescreen.$(OBJEXT) tinyxml.$(OBJEXT) \
+	tinystr.$(OBJEXT) tinyxmlerror.$(OBJEXT) \
 	tinyxmlparser.$(OBJEXT) benchmark.$(OBJEXT)
 orxonox_OBJECTS = $(am_orxonox_OBJECTS)
@@ -142,5 +143,5 @@
 @AMDEP_TRUE@	./$(DEPDIR)/physics_connection.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/physics_engine.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/player.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/player.Po ./$(DEPDIR)/point_gravity.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/primitive_model.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/projectile.Po \
@@ -155,7 +156,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/tinyxmlparser.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/track_manager.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/track_node.Po ./$(DEPDIR)/vector.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/weapon.Po ./$(DEPDIR)/world.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/world_entity.Po
+@AMDEP_TRUE@	./$(DEPDIR)/track_node.Po ./$(DEPDIR)/twirl.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/vector.Po ./$(DEPDIR)/weapon.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/world.Po ./$(DEPDIR)/world_entity.Po
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -346,4 +347,6 @@
 		 util/physics/fields/field.cc \
 		 util/physics/fields/gravity.cc \
+		 util/physics/fields/point_gravity.cc \
+		 util/physics/fields/twirl.cc \
 		 lib/math/vector.cc \
 		 lib/math/curve.cc \
@@ -418,6 +421,9 @@
 		 util/physics/physical_interaction_asym.h \
 		 util/physics/physics_connection.h \
+		 util/physics/fields/fields.h \
 		 util/physics/fields/field.h \
 		 util/physics/fields/gravity.h \
+		 util/physics/fields/point_gravity.h \
+		 util/physics/fields/twirl.h \
 		 lib/util/ini_parser.h \
 		 lib/math/vector.h \
@@ -587,4 +593,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/physics_engine.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/point_gravity.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/primitive_model.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/projectile.Po@am__quote@
@@ -605,4 +612,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/track_manager.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/track_node.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twirl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weapon.Po@am__quote@
@@ -1569,4 +1577,36 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gravity.obj `if test -f 'util/physics/fields/gravity.cc'; then $(CYGPATH_W) 'util/physics/fields/gravity.cc'; else $(CYGPATH_W) '$(srcdir)/util/physics/fields/gravity.cc'; fi`
+
+point_gravity.o: util/physics/fields/point_gravity.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT point_gravity.o -MD -MP -MF "$(DEPDIR)/point_gravity.Tpo" -c -o point_gravity.o `test -f 'util/physics/fields/point_gravity.cc' || echo '$(srcdir)/'`util/physics/fields/point_gravity.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/point_gravity.Tpo" "$(DEPDIR)/point_gravity.Po"; else rm -f "$(DEPDIR)/point_gravity.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util/physics/fields/point_gravity.cc' object='point_gravity.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/point_gravity.Po' tmpdepfile='$(DEPDIR)/point_gravity.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o point_gravity.o `test -f 'util/physics/fields/point_gravity.cc' || echo '$(srcdir)/'`util/physics/fields/point_gravity.cc
+
+point_gravity.obj: util/physics/fields/point_gravity.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT point_gravity.obj -MD -MP -MF "$(DEPDIR)/point_gravity.Tpo" -c -o point_gravity.obj `if test -f 'util/physics/fields/point_gravity.cc'; then $(CYGPATH_W) 'util/physics/fields/point_gravity.cc'; else $(CYGPATH_W) '$(srcdir)/util/physics/fields/point_gravity.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/point_gravity.Tpo" "$(DEPDIR)/point_gravity.Po"; else rm -f "$(DEPDIR)/point_gravity.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util/physics/fields/point_gravity.cc' object='point_gravity.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/point_gravity.Po' tmpdepfile='$(DEPDIR)/point_gravity.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o point_gravity.obj `if test -f 'util/physics/fields/point_gravity.cc'; then $(CYGPATH_W) 'util/physics/fields/point_gravity.cc'; else $(CYGPATH_W) '$(srcdir)/util/physics/fields/point_gravity.cc'; fi`
+
+twirl.o: util/physics/fields/twirl.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT twirl.o -MD -MP -MF "$(DEPDIR)/twirl.Tpo" -c -o twirl.o `test -f 'util/physics/fields/twirl.cc' || echo '$(srcdir)/'`util/physics/fields/twirl.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/twirl.Tpo" "$(DEPDIR)/twirl.Po"; else rm -f "$(DEPDIR)/twirl.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util/physics/fields/twirl.cc' object='twirl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/twirl.Po' tmpdepfile='$(DEPDIR)/twirl.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o twirl.o `test -f 'util/physics/fields/twirl.cc' || echo '$(srcdir)/'`util/physics/fields/twirl.cc
+
+twirl.obj: util/physics/fields/twirl.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT twirl.obj -MD -MP -MF "$(DEPDIR)/twirl.Tpo" -c -o twirl.obj `if test -f 'util/physics/fields/twirl.cc'; then $(CYGPATH_W) 'util/physics/fields/twirl.cc'; else $(CYGPATH_W) '$(srcdir)/util/physics/fields/twirl.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/twirl.Tpo" "$(DEPDIR)/twirl.Po"; else rm -f "$(DEPDIR)/twirl.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util/physics/fields/twirl.cc' object='twirl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/twirl.Po' tmpdepfile='$(DEPDIR)/twirl.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o twirl.obj `if test -f 'util/physics/fields/twirl.cc'; then $(CYGPATH_W) 'util/physics/fields/twirl.cc'; else $(CYGPATH_W) '$(srcdir)/util/physics/fields/twirl.cc'; fi`
 
 vector.o: lib/math/vector.cc
Index: orxonox/branches/physics/src/story_entities/world.cc
===================================================================
--- orxonox/branches/physics/src/story_entities/world.cc	(revision 4183)
+++ orxonox/branches/physics/src/story_entities/world.cc	(revision 4184)
@@ -492,16 +492,20 @@
 
 
-  ParticleSystem* system = new ParticleSystem(1000, PARTICLE_SPRITE);
-  system->setLifeSpan(.5);
-  system->setConserve(.99);
+  ParticleSystem* system = new ParticleSystem(100000, PARTICLE_SPARK);
+  system->setLifeSpan(5);
+  system->setConserve(.9);
   system->setRadius(2, 0, 2, 0);
 
-  ParticleEmitter* emitter = new ParticleEmitter(Vector(-1, 0, 0), M_PI_4, 100, .05);
+  ParticleEmitter* emitter = new ParticleEmitter(Vector(-1, 0, 0), M_PI_2, 5000, 1);
   emitter->setParent(this->localPlayer);
   
-  Gravity* gravity = new Gravity();
-  gravity->setMagnitude(0.001);
+  Field* twirl = new Twirl();
+  twirl->setMagnitude(.0001);
+  Field* gravity = new PointGravity();
+  gravity->setMagnitude(0.0001);
+  new PhysicsConnection(system, twirl);
   new PhysicsConnection(system, gravity);
-
+  twirl->setParent(this->localPlayer);
+  gravity->setParent(this->localCamera->getTarget());
   particleEngine->addConnection(emitter, system);
 }
Index: orxonox/branches/physics/src/util/physics/fields/fields.h
===================================================================
--- orxonox/branches/physics/src/util/physics/fields/fields.h	(revision 4184)
+++ orxonox/branches/physics/src/util/physics/fields/fields.h	(revision 4184)
@@ -0,0 +1,40 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+/*! 
+    \file fields.h
+    \brief collection of all Headers of all the different fileds there are in the 
+    PhysicsEngine
+*/
+
+
+#ifndef _FILEDS_H
+#define _FIELDS_H
+
+/* The superclass */
+#include "field.h"
+
+/* subclasses Fields without Position */
+#include "gravity.h"
+
+/* subclasses of field with position */
+#include "point_gravity.h"
+#include "twirl.h"
+
+/* many more fields */
+
+
+
+#endif /* _FIELDS_H */
Index: orxonox/branches/physics/src/util/physics/fields/point_gravity.cc
===================================================================
--- orxonox/branches/physics/src/util/physics/fields/point_gravity.cc	(revision 4184)
+++ orxonox/branches/physics/src/util/physics/fields/point_gravity.cc	(revision 4184)
@@ -0,0 +1,52 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: ...
+   co-programmer: ...
+*/
+
+//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_
+
+#include "point_gravity.h"
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+   \todo this constructor is not jet implemented - do it
+*/
+PointGravity::PointGravity () 
+{
+   this->setClassName ("PointGravity");
+}
+
+
+/**
+   \brief standard deconstructor
+
+*/
+PointGravity::~PointGravity () 
+{
+  // delete what has to be deleted here
+}
+
+/**
+   \brief calculates the PointGravity on any point in space
+   \param data The Position of the Point in space to attache PointGravity to.
+   \returns The force.
+*/
+Vector PointGravity::calcForce(const Vector& data) const
+{
+  return (this->getAbsCoor() - data) * this->getMagnitude();
+}
+
+
Index: orxonox/branches/physics/src/util/physics/fields/point_gravity.h
===================================================================
--- orxonox/branches/physics/src/util/physics/fields/point_gravity.h	(revision 4184)
+++ orxonox/branches/physics/src/util/physics/fields/point_gravity.h	(revision 4184)
@@ -0,0 +1,29 @@
+/*! 
+    \file point_gravity.h
+    \brief Definition of ...
+
+*/
+
+#ifndef _POINT_GRAVITY_H
+#define _POINT_GRAVITY_H
+
+#include "field.h"
+
+// FORWARD DEFINITION
+
+
+
+//! A class for ...
+class PointGravity : public Field {
+
+ public:
+  PointGravity();
+  virtual ~PointGravity();
+
+  virtual Vector calcForce(const Vector& data) const;
+
+ private:
+
+};
+
+#endif /* _POINT_GRAVITY_H */
Index: orxonox/branches/physics/src/util/physics/fields/twirl.cc
===================================================================
--- orxonox/branches/physics/src/util/physics/fields/twirl.cc	(revision 4184)
+++ orxonox/branches/physics/src/util/physics/fields/twirl.cc	(revision 4184)
@@ -0,0 +1,53 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: ...
+   co-programmer: ...
+*/
+
+//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_
+
+#include "twirl.h"
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+   \todo this constructor is not jet implemented - do it
+*/
+Twirl::Twirl () 
+{
+   this->setClassName ("Twirl");
+}
+
+
+/**
+   \brief standard deconstructor
+
+*/
+Twirl::~Twirl () 
+{
+  // delete what has to be deleted here
+}
+
+/**
+   \brief calculates the Twirl on any point in space
+   \param data The Position of the Point in space to attache twirl to.
+   \returns The force.
+*/
+Vector Twirl::calcForce(const Vector& data) const
+{
+  return /*this->getAbsDir()*/ Vector(0,1,0).cross(this->getAbsCoor() - data)
+    * this->getMagnitude();
+}
+
+
Index: orxonox/branches/physics/src/util/physics/fields/twirl.h
===================================================================
--- orxonox/branches/physics/src/util/physics/fields/twirl.h	(revision 4184)
+++ orxonox/branches/physics/src/util/physics/fields/twirl.h	(revision 4184)
@@ -0,0 +1,29 @@
+/*! 
+    \file twirl.h
+    \brief Definition of ...
+
+*/
+
+#ifndef _TWIRL_H
+#define _TWIRL_H
+
+#include "field.h"
+
+// FORWARD DEFINITION
+
+
+
+//! A class for ...
+class Twirl : public Field {
+
+ public:
+  Twirl();
+  virtual ~Twirl();
+
+  virtual Vector calcForce(const Vector& data) const;
+
+ private:
+
+};
+
+#endif /* _TWIRL_H */
Index: orxonox/branches/physics/src/util/physics/physics_engine.h
===================================================================
--- orxonox/branches/physics/src/util/physics/physics_engine.h	(revision 4183)
+++ orxonox/branches/physics/src/util/physics/physics_engine.h	(revision 4184)
@@ -10,5 +10,5 @@
 #include "base_object.h"
 #include "physics_connection.h"
-#include "field.h"
+#include "fields.h"
 
 // Forward Declaration
