Index: trunk/src/lib/graphics/importer/abstract_model.h
===================================================================
--- trunk/src/lib/graphics/importer/abstract_model.h	(revision 5434)
+++ trunk/src/lib/graphics/importer/abstract_model.h	(revision 5435)
@@ -16,6 +16,6 @@
 /*!
  * @file abstract_model.h
-  *  Definition of an abstract model. containing all needed for other model
-*/
+ *  Definition of an abstract model. containing all needed for other model
+ */
 
 #ifndef _ABSTRACT_MODEL_H
Index: trunk/src/lib/math/vector.h
===================================================================
--- trunk/src/lib/math/vector.h	(revision 5434)
+++ trunk/src/lib/math/vector.h	(revision 5435)
@@ -187,5 +187,5 @@
   inline Vector getSpacialAxis() const { return this->v / sin(acos(w));/*sqrt(v.x*v.x + v.y*v.y + v.z+v.z);*/ };
   /** @returns the rotational angle of this Quaternion around getSpacialAxis()  !! IN DEGREE !! */
-  inline float getSpacialAxisAngle() const { return 360.0 / M_PI * acos(this->w); };
+  inline float getSpacialAxisAngle() const { return 360.0 / M_PI * acos( this->w ); };
 
   static Quaternion quatSlerp(const Quaternion& from, const Quaternion& to, float t);
Index: trunk/src/world_entities/player.cc
===================================================================
--- trunk/src/world_entities/player.cc	(revision 5434)
+++ trunk/src/world_entities/player.cc	(revision 5435)
@@ -92,29 +92,9 @@
   wpLeft->setName("testGun Left");
 
-  Weapon* turret1 = new Turret(this->weaponMan);
-  turret1->setName("Turret1");
-  turret1->setStateDuration(WS_SHOOTING, .2);
-  Weapon* turret2 = new Turret(this->weaponMan);
-  turret2->setName("Turret2");
-  turret2->setStateDuration(WS_SHOOTING, .3);
-  Weapon* turret3 = new Turret(this->weaponMan);
-  turret3->setName("Turret3");
-  turret3->setStateDuration(WS_SHOOTING, .17);
-
-  Weapon* turret4 = new Turret(this->weaponMan);
-  turret4->setName("Turret4");
-  turret4->setStateDuration(WS_SHOOTING, .3);
-
-
   this->weaponMan->addWeapon(wpLeft, 1, 0);
   this->weaponMan->addWeapon(wpRight,1 ,1);
-  this->weaponMan->addWeapon(turret1, 2, 2);
-  this->weaponMan->addWeapon(turret2, 2, 3);
-  this->weaponMan->addWeapon(turret3, 2, 4);
-  this->weaponMan->addWeapon(turret4, 2, 5);
-
   //this->weaponMan->addWeapon(turret, 3, 0);
 
-  this->weaponMan->changeWeaponConfig(0);
+  this->weaponMan->changeWeaponConfig(1);
 }
 
@@ -153,5 +133,5 @@
 
   this->weaponMan = new WeaponManager(this);
-  this->weaponMan->setSlotCount(6);
+  this->weaponMan->setSlotCount(10);
 
   this->weaponMan->setSlotPosition(0, Vector(-2.6, .1, -3.0));
@@ -171,4 +151,13 @@
   this->weaponMan->setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
 
+  this->weaponMan->setSlotPosition(6, Vector(-2.0, 0.1, -2.0));
+  this->weaponMan->setSlotPosition(7, Vector(-2.0, 0.1, 2.0));
+
+  this->weaponMan->setSlotPosition(8, Vector(-2.5, -0.3, -2.0));
+  this->weaponMan->setSlotDirection(8, Quaternion(-M_PI, Vector(1,0,0)));
+
+  this->weaponMan->setSlotPosition(9, Vector(-2.5, -0.3, 2.0));
+  this->weaponMan->setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));
+
 }
 
@@ -222,25 +211,20 @@
 
 
-
-/**
- *  if the player is hit, call this function
- * @param weapon hit by this weapon
- * @param loc ??
-*/
-void Player::hit (WorldEntity* weapon, Vector* loc)
-{
-}
-
-
-/**
-  *  Collision with another Entity has this effect
-  * @param other the other colider
-  * @param ownhitflags ??
-  * @param otherhitflags ??
-*/
-void Player::collide (WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags)
-{
-}
-
+WorldEntity* ref = NULL;
+/**
+ *  this function is called, when two entities collide
+ * @param entity: the world entity with whom it collides
+ *
+ * Implement behaviour like damage application or other miscellaneous collision stuff in this function
+ */
+void Player::collidesWith(WorldEntity* entity, const Vector& location)
+{
+  if (entity->isA(CL_TURRET_POWER_UP) && entity != ref)
+  {
+    this->ADDWEAPON();
+    ref = entity;
+    }
+//  PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z);
+}
 
 /**
@@ -343,2 +327,15 @@
     this->weaponMan->previousWeaponConfig();
 }
+
+// FIXME THIS MIGHT BE CONSIDERED EITHER A FEATURE, OR A BUG
+int slot = 2;
+void Player::ADDWEAPON()
+{
+  Weapon* turret1 = new Turret(this->weaponMan);
+  turret1->setName("Turret");
+  turret1->setStateDuration(WS_SHOOTING, (float)rand()/RAND_MAX*.5+.1);
+
+  this->weaponMan->addWeapon(turret1, 2, slot++);
+
+  this->weaponMan->changeWeaponConfig(2);
+}
Index: trunk/src/world_entities/player.h
===================================================================
--- trunk/src/world_entities/player.h	(revision 5434)
+++ trunk/src/world_entities/player.h	(revision 5435)
@@ -41,7 +41,6 @@
     virtual void postSpawn();
     virtual void leftWorld();
-    virtual void hit(WorldEntity* weapon, Vector* loc);
-    virtual void collide(WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags);
 
+    virtual void collidesWith(WorldEntity* entity, const Vector& location);
     virtual void tick(float time);
     virtual void draw();
@@ -54,4 +53,6 @@
     void weaponAction();
 
+    // !! temporary !!
+    void ADDWEAPON();
 
   private:
Index: trunk/src/world_entities/power_ups/turret_power_up.cc
===================================================================
--- trunk/src/world_entities/power_ups/turret_power_up.cc	(revision 5434)
+++ trunk/src/world_entities/power_ups/turret_power_up.cc	(revision 5435)
@@ -17,8 +17,13 @@
 #include "turret_power_up.h"
 #include "factory.h"
+#include "state.h"
+#include "list.h"
 
 using namespace std;
 
 CREATE_FACTORY(TurretPowerUp);
+
+GLUquadricObj* TurretPowerUp_sphereObj = NULL;
+Material*      TurretPowerUp_sphereMat = NULL;
 
 
@@ -36,5 +41,7 @@
 
 
-TurretPowerUp::~TurretPowerUp () {}
+TurretPowerUp::~TurretPowerUp () {
+
+}
 
 
@@ -42,5 +49,15 @@
 {
   this->setClassID(CL_TURRET_POWER_UP, "TurretPowerUp");
-  this->loadModel("models/guns/turret1.obj");
+  this->loadModelWithScale("models/guns/turret1.obj", 2.0);
+
+  if (TurretPowerUp_sphereObj == NULL)
+    TurretPowerUp_sphereObj = gluNewQuadric();
+  if(TurretPowerUp_sphereMat == NULL)
+  {
+    TurretPowerUp_sphereMat = new Material("TurretPowerUp_Sphere");
+    TurretPowerUp_sphereMat->setTransparency(.1);
+  }
+  this->rotation = Vector(0,1,0);
+  this->cycle    = 0;
 }
 
@@ -51,2 +68,53 @@
 
 }
+
+
+/**
+ * this function is called, when two entities collide
+ * @param entity: the world entity with whom it collides
+ *
+ * Implement behaviour like damage application or other miscellaneous collision stuff in this function
+ */
+void TurretPowerUp::collidesWith(WorldEntity* entity, const Vector& location)
+{
+ // PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z);
+ if (entity->isA(CL_PLAYER))
+  State::getWorldEntityList()->remove(this);
+}
+
+/**
+ *  this method is called every frame
+ * @param time: the time in seconds that has passed since the last tick
+ *
+ * Handle all stuff that should update with time inside this method (movement, animation, etc.)
+*/
+void TurretPowerUp::tick(float dt)
+{
+  this->shiftDir(Quaternion(dt, this->rotation));
+  this->cycle+=dt;
+
+}
+
+/**
+ *  the entity is drawn onto the screen with this function
+ *
+ * This is a central function of an entity: call it to let the entity painted to the screen.
+ * Just override this function with whatever you want to be drawn.
+*/
+void TurretPowerUp::draw()
+{  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  /* translate */
+  glTranslatef (this->getAbsCoor ().x,
+                this->getAbsCoor ().y + cos(this->cycle*3.0)*2.0,
+                this->getAbsCoor ().z);
+  /* rotate */
+  Vector tmpRot = this->getAbsDir().getSpacialAxis();
+  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
+  TurretPowerUp_sphereMat->select();
+//  gluSphere(TurretPowerUp_sphereObj, 3, 5, 5);
+  this->model->draw();
+  glPopMatrix();
+
+}
+
Index: trunk/src/world_entities/power_ups/turret_power_up.h
===================================================================
--- trunk/src/world_entities/power_ups/turret_power_up.h	(revision 5434)
+++ trunk/src/world_entities/power_ups/turret_power_up.h	(revision 5435)
@@ -16,7 +16,15 @@
   virtual ~TurretPowerUp ();
 
+  virtual void TurretPowerUp::collidesWith(WorldEntity* entity, const Vector& location);
+  virtual void tick(float dt);
+  virtual void draw();
+
   private:
    void init();
    void loadParams(const TiXmlElement* root);
+
+  private:
+   Vector              rotation;
+   float               cycle;
 };
 
Index: trunk/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- trunk/src/world_entities/weapons/weapon_manager.cc	(revision 5434)
+++ trunk/src/world_entities/weapons/weapon_manager.cc	(revision 5435)
@@ -152,4 +152,7 @@
  * this is used, to identify to which ship/man/whatever this WeaponManager is connected.
  * also all the Slots will be subconnected to this parent.
+ *
+ * The reason this function exists is that the WeaponManager is neither a WorldEntity nor
+ * a PNode.
  */
 void WeaponManager::setParent(PNode* parent)
Index: trunk/src/world_entities/weapons/weapon_manager.h
===================================================================
--- trunk/src/world_entities/weapons/weapon_manager.h	(revision 5434)
+++ trunk/src/world_entities/weapons/weapon_manager.h	(revision 5435)
@@ -20,5 +20,5 @@
 
 
-#define    WM_MAX_SLOTS            8              //!< How many slots the WeaponManager has at its max
+#define    WM_MAX_SLOTS            10             //!< How many slots the WeaponManager has at its max
 #define    WM_MAX_CONFIGS          4              //!< The maximum number of predefined Configurations
 #define    WM_MAX_LOADED_WEAPONS   20             //!< The
Index: trunk/src/world_entities/world_entity.cc
===================================================================
--- trunk/src/world_entities/world_entity.cc	(revision 5434)
+++ trunk/src/world_entities/world_entity.cc	(revision 5435)
@@ -203,5 +203,5 @@
                 this->getAbsCoor ().y,
                 this->getAbsCoor ().z);
-  /* rotate */
+  /* rotate */ // FIXME: devise a new Way to rotate this
   this->getAbsDir ().matrix (matrix);
   glMultMatrixf((float*)matrix);
