Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc	(revision 3930)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc	(revision 3931)
@@ -25,5 +25,5 @@
 */
 ParticleEmitter::ParticleEmitter(const Vector& direction, float angle, float emissionRate, 
-		  float velocity, float ttl)
+		  float velocity)
 {
    this->setClassName ("ParticleEmitter");
@@ -61,16 +61,4 @@
 
 /**
-   \brief set the angle of the emitter
-   \param angle around the direction in which there are particles to be emitted
-   \param random A random spread-angle, the +- randomness of this option
-
-   if you want to change the value of this variable during emission time (to make it more dynamic)
-   you may want to use the animation class
-*/
-void ParticleEmitter::setSpread(float angle, float random)
-{}
-
-
-/**
    \brief set the emission rate
    \param sets the number of particles emitted per second
@@ -80,6 +68,19 @@
    you may want to use the animation class
 */
-void ParticleEmitter::setEmissionRate(float emissionRate, float random)
+void ParticleEmitter::setEmissionRate(float emissionRate)
 {}
+
+/**
+   \brief set the angle of the emitter
+   \param angle around the direction in which there are particles to be emitted
+   \param randomAngle A random spread-angle, the +- randomness of this option
+
+   if you want to change the value of this variable during emission time (to make it more dynamic)
+   you may want to use the animation class
+*/
+void ParticleEmitter::setSpread(float angle, float randomAngle)
+{}
+
+
 
 
@@ -103,8 +104,2 @@
 */
 
-/**
-   \brief this is called from the particle emitter to give the pulse of time...
-   \param time passed since last tick
-*/
-void ParticleEmitter::tick(float dt)
-{}
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h	(revision 3930)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h	(revision 3931)
@@ -13,4 +13,8 @@
 class ParticleSystem;
 
+typedef enum EMITTER_TYPE {EMITTER_DOT,
+			   EMITTER_PLANE,
+			   EMITTER_SPHERE,
+			   EMITTER_CUBE};
 
 //! A default singleton class.
@@ -19,5 +23,5 @@
  public:
   ParticleEmitter(const Vector& direction, float angle = 20.0, float emissionRate = 1.0, 
-		  float velocity = 1.0, float ttl = 1.0);
+		  float velocity = 1.0);
   virtual ~ParticleEmitter(void);
 
@@ -27,14 +31,12 @@
 
   /* controlling the behavour: these can be used as Animation interfaces */
-  void setSpread(float angle, float random = 0.0);
-  void setEmissionRate(float emissionRate, float random = 0.0);
+  void setEmissionRate(float emissionRate);
+  void setSpread(float angle, float randomAngle = 0.0);
   void setVelocity(float velocity, float random = 0.0);
-
-  /* some functions needed for internal use */
-  void tick(float dt);
 
  private:
   Vector direction;     //!< emition direction
   float angle;          //!< max angle from the direction of the emitter
+  float angleRandom;    //!< random emission angle (angle +- angleRandom is the emitted angle.
   float emissionRate;   //!< amount of particles per seconds emitted by emiter
   float velocity;       //!< the contant speed a particle gets if been emitted
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.cc
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.cc	(revision 3930)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.cc	(revision 3931)
@@ -18,4 +18,7 @@
 #include "particle_engine.h"
 
+#include "particle_system.h"
+#include "particle_emitter.h"
+
 #include "list.h"
 
@@ -29,5 +32,5 @@
    this->setClassName ("ParticleEngine");
 
-   this->partSysList = new tList<ParticleSystem>;
+   this->systemList = new tList<ParticleSystem>;
 }
 
@@ -53,7 +56,24 @@
 ParticleEngine::~ParticleEngine () 
 {
-  delete this->partSysList;
+  delete this->systemList;
 
 
   ParticleEngine::singletonRef = NULL;
 }
+
+/**
+   \brief this function ticks all the ParticleSystems, so an animation will flow
+   \param dt passed since last tick
+*/
+void ParticleEngine::tick(float dt)
+{
+  tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
+  ParticleSystem* tmpSys = tmpIt->nextElement();
+  while(tmpSys)
+    {
+      tmpSys->tick(dt);
+      tmpSys = tmpIt->nextElement();
+    }
+  delete tmpIt;
+
+}
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.h
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.h	(revision 3930)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.h	(revision 3931)
@@ -12,5 +12,11 @@
 template<class T> class tList;
 class ParticleSystem;
+class ParticleEmitter;
 
+struct ParticleConnection
+{
+  ParticleEmitter* emitter;    //!< The emitter to emit system from.
+  ParticleSystem* system;      //!< The Particles emitted from emitter.
+};
 
 //! A default singleton class.
@@ -23,9 +29,20 @@
   void tick(float dt);
 
+  void addSystem(ParticleSystem* system);
+  void addEmitter(ParticleEmitter* emitter);
+  void addConection(ParticleEmitter* emitter, ParticleSystem* system);
+
+  bool removeSystem(ParticleSystem* system);
+  bool removeEmitter(ParticleEmitter* emitter);
+  bool breakConection(ParticleEmitter* emitter, ParticleSystem* system);
+
  private:
   ParticleEngine(void);
   static ParticleEngine* singletonRef;
 
-  tList<ParticleSystem>* partSysList;
+  tList<ParticleSystem>* systemList;
+  tList<ParticleEmitter>* emitterList;
+
+  tList<ParticleConnection>* connectionList;
 };
 
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc	(revision 3930)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc	(revision 3931)
@@ -48,2 +48,8 @@
 }
 
+
+void ParticleSystem::tick(float dt)
+{
+  
+
+}
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.h
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.h	(revision 3930)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.h	(revision 3931)
@@ -13,9 +13,10 @@
 typedef enum PARTICLE_TYPE {PARTICLE_DOT,
 			    PARTICLE_SPRITE,
+			    PARTICLE_MULTI_SPRITE,
 			    PARTICLE_OBJECT,
-			    PARTICLE_OBJECT_ARRAY,
+			    PARTICLE_MULTI_OBJECT,
 			    PARTICLE_PRIMITIVE};
 
-#define PARTICLE_DEFAULT_COUNT 200             //!< a default count of particles in the system.
+#define PARTICLE_DEFAULT_MAX_COUNT 200         //!< a default count of particles in the system.
 #define PARTICLE_DEFAULT_TYPE  PARTICLE_SPRITE //!< A default type of the system.
 
@@ -32,6 +33,9 @@
   Vector velocity;            //!< The current velocity of this particle.
   Quaternion rotation;        //!< The current rotation of this particle.
+  float mass;                 //!< The mass of this particle.
+  float radius;               //!< The size of this particle. 
 
-  //  Particle* next;            //!< pointer to the next particle in the List. (NULL if no preceding one)
+
+  Particle* next;             //!< pointer to the next particle in the List. (NULL if no preceding one)
 };
 
@@ -40,17 +44,26 @@
 
  public:
-  ParticleSystem(unsigned int particleCount = PARTICLE_DEFAULT_COUNT, PARTICLE_TYPE type = PARTICLE_DEFAULT_TYPE);
+  ParticleSystem(unsigned int particleCount = PARTICLE_DEFAULT_MAX_COUNT, PARTICLE_TYPE type = PARTICLE_DEFAULT_TYPE);
   virtual ~ParticleSystem();
 
   void setMaterial(Material* material);
-  void addEmitter(ParticleEmitter* emitter);
+  void setLifeSpan(float lifeSpan, float randomLifeSpan = 0.0);
+  void setRadius(float startRadius, float endRadius, float randomRadius = 0.0);
+
+  void tick(float dt);
 
  private:
-  int particleCount;         //!< the count of Particles for this ParticleSystem.
-  PARTICLE_TYPE particleType;//!< A type for the Particles
+  float conserve;            //!< How much energy gets conserved to the next Tick.
+  float lifeSpan;            //!< Initial lifetime of a Particle.
+  float randomLifeSpan;
+  float startRadius;
+  float endRadius;
+  float randomRadius;
+  
+  // particles
+  int maxCount;              //!< the count of Particles for this ParticleSystem.
+  PARTICLE_TYPE particleType;//!< A type for all the Particles
+  Material* material;        //!< A Material for all the Particles.
   Particle* particles;       //!< A list of particles of this System.
-  Material* material;        //!< A Material for all the Particles.
-
-  ParticleEmitter* emitter;  //!< An emitter for this particleSystem.
 };
 
