Index: /trunk/src/defs/class_id.h
===================================================================
--- /trunk/src/defs/class_id.h	(revision 7046)
+++ /trunk/src/defs/class_id.h	(revision 7047)
@@ -276,9 +276,9 @@
   // Particles
   CL_PARTICLE_SYSTEM            =    0x00a01000,
-  CL_SPRITE_PARTICLES           =    0x00000a01,
-  CL_SPARK_PARTICLES            =    0x00000a02,
-  CL_PNODE_PARTICLES            =    0x00000a03,
-  CL_DOT_PARTICLES              =    0x00000a04,
-  CL_MODEL_PARTICLES            =    0x00000a05,
+  CL_SPRITE_PARTICLES           =    0x00002000,
+  CL_SPARK_PARTICLES            =    0x00004000,
+  CL_PNODE_PARTICLES            =    0x00008000,
+  CL_DOT_PARTICLES              =    0x00010000,
+  CL_MODEL_PARTICLES            =    0x00020000,
 
   CL_PARTICLE_EMITTER           =    0x00a02000,
@@ -295,4 +295,5 @@
   CL_FOG_EFFECT                 =    0x00000841,
   CL_LENSE_FLARE                =    0x00000842,
+  CL_EXPLOSION                  =    0x00000850,
 
   // Element2D's  (range from 0x00000b00 to 0x00000bff)
Index: /trunk/src/world_entities/Makefile.am
===================================================================
--- /trunk/src/world_entities/Makefile.am	(revision 7046)
+++ /trunk/src/world_entities/Makefile.am	(revision 7047)
@@ -65,5 +65,7 @@
                   \
                   world_entities/elements/image_entity.cc \
-                  world_entities/elements/text_element.cc
+                  world_entities/elements/text_element.cc \
+                  \
+                  world_entities/effects/explosion.cc
 
 
@@ -128,4 +130,7 @@
                  \
                  world_entities/elements/image_entity.h \
-                 world_entities/elements/text_element.h
+                 world_entities/elements/text_element.h \
+                 \
+                 world_entities/effects/explosion.h
 
+
Index: /trunk/src/world_entities/effects/explosion.cc
===================================================================
--- /trunk/src/world_entities/effects/explosion.cc	(revision 7047)
+++ /trunk/src/world_entities/effects/explosion.cc	(revision 7047)
@@ -0,0 +1,110 @@
+/*
+   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: Patrick Boenzli
+   co-programmer: Benjamin Grauer
+
+*/
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
+
+#include "explosion.h"
+
+#include "fast_factory.h"
+
+#include "state.h"
+#include "class_list.h"
+
+#include "dot_emitter.h"
+#include "sprite_particles.h"
+
+
+using namespace std;
+
+CREATE_FAST_FACTORY_STATIC(Explosion, CL_EXPLOSION);
+
+/**
+ *  standard constructor
+*/
+Explosion::Explosion ()
+{
+  this->setClassID(CL_EXPLOSION, "Explosion");
+
+  this->emitter = new DotEmitter(100, 5, M_2_PI);
+  this->emitter->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
+  this->emitter->setParent(this);
+  this->emitter->setSpread(M_PI, M_PI);
+
+  this->lifeCycle = 0.0f;
+  this->lifeTime = 4.0f;
+
+}
+
+
+/**
+ *  standard deconstructor
+*/
+Explosion::~Explosion ()
+{
+  delete this->emitter;
+
+  /* this is normaly done by World.cc by deleting the ParticleEngine */
+  if (Explosion::explosionParticles != NULL && ClassList::getList(CL_EXPLOSION)->size() <= 1)
+     Explosion::explosionParticles = NULL;
+}
+
+SpriteParticles* Explosion::explosionParticles = NULL;
+
+void Explosion::activate()
+{
+  if (unlikely(Explosion::explosionParticles == NULL))
+  {
+    Explosion::explosionParticles = new SpriteParticles(200);
+    Explosion::explosionParticles->setName("ExplosionExplosionParticles");
+    Explosion::explosionParticles->setMaterialTexture("maps/radial-trans-noise.png");
+    Explosion::explosionParticles->setLifeSpan(.5, .3);
+    Explosion::explosionParticles->setRadius(0.0, 10);
+    Explosion::explosionParticles->setRadius(.5, 15.0);
+    Explosion::explosionParticles->setRadius(1.0, 10.0);
+    Explosion::explosionParticles->setColor(0.0, 0,1,0,1);
+    Explosion::explosionParticles->setColor(0.5, .8,.8,0,.8);
+    Explosion::explosionParticles->setColor(0.8, .8,.8,.3,.8);
+    Explosion::explosionParticles->setColor(1.0, 1,1,1,.0);
+  }
+
+  this->emitter->setSystem(Explosion::explosionParticles);
+
+  this->updateNode(0);
+  this->emitter->setEmissionRate(45.0);
+  this->emitter->setEmissionVelocity(0.0);
+  this->toList(OM_DEAD_TICK);
+}
+
+
+void Explosion::deactivate()
+{
+  this->emitter->setSystem(NULL);
+  this->lifeCycle = 0.0;
+  this->toList(OM_DEAD);
+
+  Explosion::fastFactory->kill(this);
+}
+
+
+/**
+ *  signal tick, time dependent things will be handled here
+ * @param time since last tick
+*/
+void Explosion::tick (float dt)
+{
+  this->lifeCycle += dt;
+  if(this->lifeTime < this->lifeCycle)
+    this->deactivate();
+}
Index: /trunk/src/world_entities/effects/explosion.h
===================================================================
--- /trunk/src/world_entities/effects/explosion.h	(revision 7047)
+++ /trunk/src/world_entities/effects/explosion.h	(revision 7047)
@@ -0,0 +1,36 @@
+/*!
+ * @file explosion.h
+ * @brief a Explosion Projectile
+*/
+
+#ifndef _EXPLOSION_H
+#define _EXPLOSION_H
+
+#include "world_entity.h"
+
+class SpriteParticles;
+class ParticleEmitter;
+class FastFactory;
+
+class Explosion : public WorldEntity
+{
+  public:
+    Explosion ();
+    virtual ~Explosion ();
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void tick (float time);
+
+  private:
+    static FastFactory*        fastFactory;
+
+    float                      lifeTime;
+    float                      lifeCycle;
+
+    static SpriteParticles*           explosionParticles;
+    ParticleEmitter*           emitter;
+};
+
+#endif /* _EXPLOSION_H */
