Index: /code/trunk/src/asylum/orxonox/objects/Fighter.cc
===================================================================
--- /code/trunk/src/asylum/orxonox/objects/Fighter.cc	(revision 1552)
+++ /code/trunk/src/asylum/orxonox/objects/Fighter.cc	(revision 1553)
@@ -42,5 +42,5 @@
 #include "GraphicsEngine.h"
 #include "core/InputManager.h"
-#include "particle/ParticleInterface.h"
+#include "tools/ParticleInterface.h"
 #include "weapon/AmmunitionDump.h"
 #include "weapon/BarrelGun.h"
Index: /code/trunk/src/orxonox/CMakeLists.txt
===================================================================
--- /code/trunk/src/orxonox/CMakeLists.txt	(revision 1552)
+++ /code/trunk/src/orxonox/CMakeLists.txt	(revision 1553)
@@ -11,5 +11,4 @@
   hud/RadarObject.cc
   hud/Navigation.cc
-  particle/ParticleInterface.cc
   tolua/tolua_bind.cc
 
@@ -17,4 +16,5 @@
   tools/Light.cc
   tools/Mesh.cc
+  tools/ParticleInterface.cc
   tools/Timer.cc
 
Index: /code/trunk/src/orxonox/objects/ParticleProjectile.h
===================================================================
--- /code/trunk/src/orxonox/objects/ParticleProjectile.h	(revision 1552)
+++ /code/trunk/src/orxonox/objects/ParticleProjectile.h	(revision 1553)
@@ -33,5 +33,5 @@
 
 #include "BillboardProjectile.h"
-#include "particle/ParticleInterface.h"
+#include "tools/ParticleInterface.h"
 #include "util/Math.h"
 
Index: /code/trunk/src/orxonox/objects/ParticleSpawner.cc
===================================================================
--- /code/trunk/src/orxonox/objects/ParticleSpawner.cc	(revision 1552)
+++ /code/trunk/src/orxonox/objects/ParticleSpawner.cc	(revision 1553)
@@ -32,5 +32,5 @@
 #include "core/CoreIncludes.h"
 #include "core/Executor.h"
-#include "particle/ParticleInterface.h"
+#include "tools/ParticleInterface.h"
 
 namespace orxonox
Index: /code/trunk/src/orxonox/objects/Projectile.cc
===================================================================
--- /code/trunk/src/orxonox/objects/Projectile.cc	(revision 1552)
+++ /code/trunk/src/orxonox/objects/Projectile.cc	(revision 1553)
@@ -35,5 +35,5 @@
 #include "core/Executor.h"
 #include "core/ConfigValueIncludes.h"
-#include "particle/ParticleInterface.h"
+#include "tools/ParticleInterface.h"
 
 #include "SpaceShipAI.h"
Index: /code/trunk/src/orxonox/objects/SpaceShip.cc
===================================================================
--- /code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1552)
+++ /code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1553)
@@ -43,5 +43,5 @@
 #include "GraphicsEngine.h"
 #include "core/input/InputManager.h"
-#include "particle/ParticleInterface.h"
+#include "tools/ParticleInterface.h"
 #include "RotatingProjectile.h"
 #include "ParticleProjectile.h"
Index: /code/trunk/src/orxonox/objects/SpaceShipAI.cc
===================================================================
--- /code/trunk/src/orxonox/objects/SpaceShipAI.cc	(revision 1552)
+++ /code/trunk/src/orxonox/objects/SpaceShipAI.cc	(revision 1553)
@@ -38,5 +38,5 @@
 #include "core/ConsoleCommand.h"
 #include "core/XMLPort.h"
-#include "particle/ParticleInterface.h"
+#include "tools/ParticleInterface.h"
 
 #define ACTION_INTERVAL 1.0f
Index: /code/trunk/src/orxonox/tools/ParticleInterface.cc
===================================================================
--- /code/trunk/src/orxonox/tools/ParticleInterface.cc	(revision 1553)
+++ /code/trunk/src/orxonox/tools/ParticleInterface.cc	(revision 1553)
@@ -0,0 +1,155 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   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
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      ...
+*   Co-authors:
+*      ...
+*
+*/
+
+/**
+* @file ParticleInterface.cc
+* @brief class to control praticle effects
+*/
+
+#include "OrxonoxStableHeaders.h"
+#include "ParticleInterface.h"
+
+#include <OgreParticleSystem.h>
+#include <OgreParticleEmitter.h>
+#include <OgreSceneManager.h>
+
+#include "GraphicsEngine.h"
+#include "util/Convert.h"
+
+namespace orxonox
+{
+  unsigned int ParticleInterface::counter_s = 0;
+  ParticleInterface* ParticleInterface::currentParticleInterface_s = 0;
+
+  ParticleInterface::ParticleInterface(const std::string& templateName)
+  {
+    this->sceneNode_ = 0;
+    this->particleSystem_ = GraphicsEngine::getSingleton().getSceneManager()->createParticleSystem("particles" + getConvertedValue<unsigned int, std::string>(ParticleInterface::counter_s++), templateName);
+  }
+
+  ParticleInterface::~ParticleInterface()
+  {
+    this->particleSystem_->removeAllEmitters();
+    GraphicsEngine::getSingleton().getSceneManager()->destroyParticleSystem(particleSystem_);
+  }
+
+  void ParticleInterface::addToSceneNode(Ogre::SceneNode* sceneNode)
+  {
+    this->sceneNode_ = sceneNode;
+    this->sceneNode_->attachObject(this->particleSystem_);
+  }
+
+  void ParticleInterface::detachFromSceneNode()
+  {
+    if (this->sceneNode_)
+    {
+      this->sceneNode_->detachObject(this->particleSystem_);
+      this->sceneNode_ = 0;
+    }
+  }
+
+  Ogre::ParticleEmitter* ParticleInterface::createNewEmitter()
+  {
+    if (this->particleSystem_->getNumEmitters() > 0)
+    {
+      Ogre::ParticleEmitter* newemitter = this->particleSystem_->addEmitter(this->particleSystem_->getEmitter(0)->getType());
+      this->particleSystem_->getEmitter(0)->copyParametersTo(newemitter);
+      return newemitter;
+    }
+    else
+      return 0;
+  }
+  Ogre::ParticleEmitter* ParticleInterface::getEmitter(unsigned int emitterNr) const
+  {
+    if (emitterNr < this->particleSystem_->getNumEmitters())
+      return this->particleSystem_->getEmitter(emitterNr);
+    else
+      return 0;
+  }
+  void ParticleInterface::removeEmitter(unsigned int emitterNr)
+  {
+    if (emitterNr < this->particleSystem_->getNumEmitters())
+      this->particleSystem_->removeEmitter(emitterNr);
+  }
+  void ParticleInterface::removeAllEmitters()
+  {
+    this->particleSystem_->removeAllEmitters();
+  }
+  unsigned int ParticleInterface::getNumEmitters() const
+  {
+    return this->particleSystem_->getNumEmitters();
+  }
+
+  Ogre::ParticleAffector* ParticleInterface::addAffector(const std::string& name)
+  {
+    return this->particleSystem_->addAffector(name);
+  }
+  Ogre::ParticleAffector* ParticleInterface::getAffector(unsigned int affectorNr) const
+  {
+    if (affectorNr < this->particleSystem_->getNumAffectors())
+      return this->particleSystem_->getAffector(affectorNr);
+    else
+      return 0;
+  }
+  void ParticleInterface::removeAffector(unsigned int affectorNr)
+  {
+    if (affectorNr < this->particleSystem_->getNumAffectors())
+      this->particleSystem_->removeAffector(affectorNr);
+  }
+  void ParticleInterface::removeAllAffectors()
+  {
+    this->particleSystem_->removeAllAffectors();
+  }
+  unsigned int ParticleInterface::getNumAffectors() const
+  {
+    return this->particleSystem_->getNumAffectors();
+  }
+
+  void ParticleInterface::setEnabled(bool enable)
+  {
+    for (unsigned int i = 0; i < this->particleSystem_->getNumEmitters(); i++)
+      this->particleSystem_->getEmitter(i)->setEnabled(enable);
+  }
+
+  void ParticleInterface::setSpeedFactor(float factor)
+  {
+    this->particleSystem_->setSpeedFactor(factor);
+  }
+  float ParticleInterface::getSpeedFactor() const
+  {
+    return this->particleSystem_->getSpeedFactor();
+  }
+
+  bool ParticleInterface::getKeepParticlesInLocalSpace() const
+  {
+    return this->particleSystem_->getKeepParticlesInLocalSpace();
+  }
+  void ParticleInterface::setKeepParticlesInLocalSpace(bool keep)
+  {
+    this->particleSystem_->setKeepParticlesInLocalSpace(keep);
+  }
+}
Index: /code/trunk/src/orxonox/tools/ParticleInterface.h
===================================================================
--- /code/trunk/src/orxonox/tools/ParticleInterface.h	(revision 1553)
+++ /code/trunk/src/orxonox/tools/ParticleInterface.h	(revision 1553)
@@ -0,0 +1,90 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   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
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      ...
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _ParticleInterface_H__
+#define _ParticleInterface_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include <string>
+#include <OgreParticleEmitter.h>
+
+#include "util/Math.h"
+
+#define getAllEmitters() \
+  storeThisAsCurrentParticleInterface(); \
+  for (unsigned int i = 0; i < ParticleInterface::getCurrentParticleInterface()->getNumEmitters(); ++i) \
+    ParticleInterface::getCurrentParticleInterface()->getEmitter(i)
+
+namespace orxonox
+{
+  class _OrxonoxExport ParticleInterface
+  {
+    public:
+      ParticleInterface(const std::string& templateName);
+      ~ParticleInterface();
+
+      inline Ogre::ParticleSystem* getParticleSystem() const
+        { return this->particleSystem_; }
+
+      void addToSceneNode(Ogre::SceneNode* sceneNode);
+      void detachFromSceneNode();
+
+      Ogre::ParticleEmitter* createNewEmitter();
+      Ogre::ParticleEmitter* getEmitter(unsigned int emitterNr) const;
+      void removeEmitter(unsigned int emitterNr);
+      void removeAllEmitters();
+      unsigned int getNumEmitters() const;
+
+      Ogre::ParticleAffector* addAffector(const std::string& name);
+      Ogre::ParticleAffector* getAffector(unsigned int affectorNr) const;
+      void removeAffector(unsigned int affectorNr);
+      void removeAllAffectors();
+      unsigned int getNumAffectors() const;
+
+      float getSpeedFactor() const;
+      void setSpeedFactor(float factor);
+      bool getKeepParticlesInLocalSpace() const;
+      void setKeepParticlesInLocalSpace(bool keep);
+
+      void setEnabled(bool enable);
+
+      inline void storeThisAsCurrentParticleInterface()
+        { ParticleInterface::currentParticleInterface_s = this; }
+      inline static ParticleInterface* getCurrentParticleInterface()
+        { return ParticleInterface::currentParticleInterface_s; }
+
+    private:
+      static ParticleInterface* currentParticleInterface_s;
+      static unsigned int counter_s;
+      Ogre::SceneNode* sceneNode_;
+      Ogre::ParticleSystem* particleSystem_;
+  };
+}
+
+#endif /* _ParticleInterface_H__ */
