Index: /trunk/src/Makefile.am
===================================================================
--- /trunk/src/Makefile.am	(revision 5555)
+++ /trunk/src/Makefile.am	(revision 5556)
@@ -65,4 +65,5 @@
                   world_entities/weapons/rocket.cc \
                   world_entities/weapons/laser.cc \
+                  world_entities/weapons/aim.cc \
                   world_entities/weapons/crosshair.cc \
                   world_entities/power_ups/power_up.cc \
@@ -98,4 +99,5 @@
                  world_entities/weapons/rocket.h \
                  world_entities/weapons/laser.h \
+                 world_entities/weapons/aim.h \
                  world_entities/weapons/crosshair.h \
                  world_entities/power_ups/power_up.h \
Index: /trunk/src/Makefile.in
===================================================================
--- /trunk/src/Makefile.in	(revision 5555)
+++ /trunk/src/Makefile.in	(revision 5556)
@@ -66,6 +66,7 @@
 	orxonox-test_gun.$(OBJEXT) orxonox-turret.$(OBJEXT) \
 	orxonox-test_bullet.$(OBJEXT) orxonox-rocket.$(OBJEXT) \
-	orxonox-laser.$(OBJEXT) orxonox-crosshair.$(OBJEXT) \
-	orxonox-power_up.$(OBJEXT) orxonox-turret_power_up.$(OBJEXT) \
+	orxonox-laser.$(OBJEXT) orxonox-aim.$(OBJEXT) \
+	orxonox-crosshair.$(OBJEXT) orxonox-power_up.$(OBJEXT) \
+	orxonox-turret_power_up.$(OBJEXT) \
 	orxonox-laser_power_up.$(OBJEXT) orxonox-benchmark.$(OBJEXT)
 orxonox_OBJECTS = $(am_orxonox_OBJECTS)
@@ -259,4 +260,5 @@
                   world_entities/weapons/rocket.cc \
                   world_entities/weapons/laser.cc \
+                  world_entities/weapons/aim.cc \
                   world_entities/weapons/crosshair.cc \
                   world_entities/power_ups/power_up.cc \
@@ -292,4 +294,5 @@
                  world_entities/weapons/rocket.h \
                  world_entities/weapons/laser.h \
+                 world_entities/weapons/aim.h \
                  world_entities/weapons/crosshair.h \
                  world_entities/power_ups/power_up.h \
@@ -392,4 +395,5 @@
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox-aim.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox-benchmark.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox-camera.Po@am__quote@
@@ -771,4 +775,18 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(orxonox_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o orxonox-laser.obj `if test -f 'world_entities/weapons/laser.cc'; then $(CYGPATH_W) 'world_entities/weapons/laser.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/weapons/laser.cc'; fi`
+
+orxonox-aim.o: world_entities/weapons/aim.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(orxonox_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT orxonox-aim.o -MD -MP -MF "$(DEPDIR)/orxonox-aim.Tpo" -c -o orxonox-aim.o `test -f 'world_entities/weapons/aim.cc' || echo '$(srcdir)/'`world_entities/weapons/aim.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/orxonox-aim.Tpo" "$(DEPDIR)/orxonox-aim.Po"; else rm -f "$(DEPDIR)/orxonox-aim.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='world_entities/weapons/aim.cc' object='orxonox-aim.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(orxonox_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o orxonox-aim.o `test -f 'world_entities/weapons/aim.cc' || echo '$(srcdir)/'`world_entities/weapons/aim.cc
+
+orxonox-aim.obj: world_entities/weapons/aim.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(orxonox_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT orxonox-aim.obj -MD -MP -MF "$(DEPDIR)/orxonox-aim.Tpo" -c -o orxonox-aim.obj `if test -f 'world_entities/weapons/aim.cc'; then $(CYGPATH_W) 'world_entities/weapons/aim.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/weapons/aim.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/orxonox-aim.Tpo" "$(DEPDIR)/orxonox-aim.Po"; else rm -f "$(DEPDIR)/orxonox-aim.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='world_entities/weapons/aim.cc' object='orxonox-aim.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(orxonox_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o orxonox-aim.obj `if test -f 'world_entities/weapons/aim.cc'; then $(CYGPATH_W) 'world_entities/weapons/aim.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/weapons/aim.cc'; fi`
 
 orxonox-crosshair.o: world_entities/weapons/crosshair.cc
Index: /trunk/src/defs/include_paths.am
===================================================================
--- /trunk/src/defs/include_paths.am	(revision 5555)
+++ /trunk/src/defs/include_paths.am	(revision 5556)
@@ -1,5 +1,4 @@
 AM_CXXFLAGS=-I$(MAINSRCDIR)
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/world_entities
-AM_CXXFLAGS+=-I$(MAINSRCDIR)/world_entities/weapons
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/story_entities
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib
Index: /trunk/src/story_entities/world.cc
===================================================================
--- /trunk/src/story_entities/world.cc	(revision 5555)
+++ /trunk/src/story_entities/world.cc	(revision 5556)
@@ -61,5 +61,5 @@
 #include "factory.h"
 
-#include "projectile.h"
+#include "weapons/projectile.h"
 #include "event_handler.h"
 
Index: /trunk/src/util/loading/load_param.h
===================================================================
--- /trunk/src/util/loading/load_param.h	(revision 5555)
+++ /trunk/src/util/loading/load_param.h	(revision 5556)
@@ -36,4 +36,5 @@
 class LoadClassDescription;
 class LoadParamDescription;
+class MultiType;
 
 /**************************
@@ -45,4 +46,5 @@
  public:
   LoadParamBase* describe(const char* descriptionText);
+  LoadParamBase* defaultValues(unsigned int count, ...);
 
  protected:
@@ -54,4 +56,6 @@
   const char*              loadString;           //!< The string loaded by this LoadParam
   const void*              pointerToParam;       //!< A Pointer to a Parameter.
+
+  MultiType*               defaultValue;
 };
 
@@ -93,5 +97,5 @@
 #define LoadParam0() \
 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(), bool multi = false) \
-  : LoadParamBase(root, pt2Object, paramName, 0, multi, NULL, "") \
+  : LoadParamBase(root, pt2Object, paramName, 0, multi, NULL) \
 { \
   if (loadString != NULL && root != NULL) \
Index: /trunk/src/util/loading/load_param_description.cc
===================================================================
--- /trunk/src/util/loading/load_param_description.cc	(revision 5555)
+++ /trunk/src/util/loading/load_param_description.cc	(revision 5556)
@@ -15,4 +15,5 @@
 
 #include "load_param_description.h"
+
 #include "list.h"
 #include <stdarg.h>
Index: /trunk/src/util/loading/load_param_description.h
===================================================================
--- /trunk/src/util/loading/load_param_description.h	(revision 5555)
+++ /trunk/src/util/loading/load_param_description.h	(revision 5556)
@@ -26,4 +26,5 @@
 // Forward Declaration //
 template<class T> class tList;
+class MultiType;
 
 /************************
@@ -49,5 +50,5 @@
   int*          types;                 //!< What kind of parameters does this function take ??
   char*         description;           //!< A longer description about this function.
-  char**        defaultValues;         //!< The 'Default Values'.
+  char**        defaultValues;         //!< The 'Default Values'. @TODO MAKE THIS A MULTITYPE
 };
 
@@ -71,6 +72,7 @@
  private:
   static bool                          parametersDescription;  //!< if parameter-description should be enabled.
-  static tList<LoadClassDescription>*  classList;              //!< a list, that holds all the loadable classes. (after one instance has been loaded)
+  static tList<LoadClassDescription>*  classList;              //!< a list, that stores all the loadable classes. (after one instance has been loaded)
   char*                                className;              //!< name of the class
+
   tList<LoadParamDescription>*         paramList;              //!< List of parameters this class knows.
 };
Index: /trunk/src/world_entities/player.cc
===================================================================
--- /trunk/src/world_entities/player.cc	(revision 5555)
+++ /trunk/src/world_entities/player.cc	(revision 5556)
@@ -23,7 +23,7 @@
 #include "factory.h"
 
-#include "weapon_manager.h"
-#include "test_gun.h"
-#include "turret.h"
+#include "weapons/weapon_manager.h"
+#include "weapons/test_gun.h"
+#include "weapons/turret.h"
 
 #include "list.h"
Index: /trunk/src/world_entities/weapons/aim.cc
===================================================================
--- /trunk/src/world_entities/weapons/aim.cc	(revision 5556)
+++ /trunk/src/world_entities/weapons/aim.cc	(revision 5556)
@@ -0,0 +1,167 @@
+/*
+   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: ...
+*/
+
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
+
+#include "aim.h"
+
+#include "load_param.h"
+#include "graphics_engine.h"
+#include "glincl.h"
+#include "state.h"
+#include "material.h"
+
+using namespace std;
+
+
+/**
+ * standart constructor
+ */
+Aim::Aim (const TiXmlElement* root)
+{
+  this->init();
+
+  if (root)
+    this->loadParams(root);
+  else
+    this->setTexture("maps/aim.png");
+}
+
+/**
+ * destroys a Aim
+*/
+Aim::~Aim ()
+{
+  if (this->material)
+  delete this->material;
+
+  // delete what has to be deleted here
+
+  GraphicsEngine::showMouse(true);
+  GraphicsEngine::stealWMEvents(false);
+}
+
+/**
+ * initializes the Aim
+ */
+void Aim::init()
+{
+  this->setClassID(CL_CROSSHAIR, "Aim");
+  this->setName("Aim");
+
+  this->setLayer(E2D_LAYER_TOP);
+  this->setRotationSpeed(5);
+  this->setSize(GraphicsEngine::getInstance()->getResolutionX()/10.0);
+
+//  this->setBindNode(this);
+  this->material = new Material;
+
+  // center the mouse on the screen, and also hide the cursors
+  SDL_WarpMouse(GraphicsEngine::getInstance()->getResolutionX()/2, GraphicsEngine::getInstance()->getResolutionY()/2);
+  GraphicsEngine::showMouse(false);
+  GraphicsEngine::stealWMEvents(true);
+}
+
+
+void Aim::loadParams(const TiXmlElement* root)
+{
+  static_cast<PNode*>(this)->loadParams(root);
+
+  LoadParam<Aim>(root, "texture", this, &Aim::setTexture)
+      .describe("the texture-file to load onto the Aim");
+
+  LoadParam<Aim>(root, "size", this, &Aim::setSize)
+      .describe("the size of the Aim in Pixels");
+
+  LoadParam<Aim>(root, "rotation-speed", this, &Aim::setRotationSpeed)
+      .describe("the Speed with which the Aim should rotate");
+}
+
+
+/**
+ * sets the size of the Aim.
+ * @param size the size in pixels
+ */
+void Aim::setSize(float size)
+{
+  this->setSize2D(size/2, size/2);
+}
+
+/**
+ * sets the material to load
+ * @param textureFile The texture-file to load onto the crosshair
+ */
+void Aim::setTexture(const char* textureFile)
+{
+  this->material->setDiffuseMap(textureFile);
+}
+
+/**
+ * ticks the Aim
+ * @param dt the time to ticks
+ */
+void Aim::tick(float dt)
+{
+  // let the crosshair rotate
+  this->shiftDir2D(dt * rotationSpeed);
+
+
+  float z = 0.0f;
+  glReadPixels ((int)this->getAbsCoor2D().x,
+                 GraphicsEngine::getInstance()->getResolutionY()-(int)this->getAbsCoor2D().y-1,
+                 1,
+                 1,
+                 GL_DEPTH_COMPONENT,
+                 GL_FLOAT,
+                 &z);
+
+
+  GLdouble objX=.0, objY=.0, objZ=.0;
+  gluUnProject(this->getAbsCoor2D().x,
+               GraphicsEngine::getInstance()->getResolutionY()-this->getAbsCoor2D().y-1,
+               .99,  // z
+               GraphicsEngine::modMat,
+               GraphicsEngine::projMat,
+               GraphicsEngine::viewPort,
+               &objX,
+               &objY,
+               &objZ );
+
+  this->setAbsCoor(objX, objY, objZ);
+}
+
+/**
+ * draws the crosshair
+ */
+void Aim::draw() const
+{
+  glPushMatrix();
+  glTranslatef(this->getAbsCoor2D().x, this->getAbsCoor2D().y, 0);
+
+  glRotatef(this->getAbsDir2D(), 0,0,1);
+  this->material->select();
+  glBegin(GL_TRIANGLE_STRIP);
+  glTexCoord2f(0, 0);
+  glVertex2f(-this->getSizeX2D(), -this->getSizeY2D());
+  glTexCoord2f(1, 0);
+  glVertex2f(this->getSizeX2D(), -this->getSizeY2D());
+  glTexCoord2f(0, 1);
+  glVertex2f(-this->getSizeX2D(), this->getSizeY2D());
+  glTexCoord2f(1, 1);
+  glVertex2f(this->getSizeX2D(), this->getSizeY2D());
+  glEnd();
+  glPopMatrix();
+
+}
Index: /trunk/src/world_entities/weapons/aim.h
===================================================================
--- /trunk/src/world_entities/weapons/aim.h	(revision 5556)
+++ /trunk/src/world_entities/weapons/aim.h	(revision 5556)
@@ -0,0 +1,39 @@
+/*!
+ * @file aim.h
+ *  Definition of
+ */
+
+#ifndef _AIM_H
+#define _AIM_H
+
+#include "p_node.h"
+#include "element_2d.h"
+// FORWARD DECLARATION
+class Model;
+class Material;
+class TiXmlElement;
+
+//! An Aim for zooming in on Targets.
+class Aim : public PNode, public Element2D {
+
+ public:
+  Aim(const TiXmlElement* root = NULL);
+  virtual ~Aim();
+
+  void init();
+  void loadParams(const TiXmlElement* root);
+
+  void setSize(float size);
+  void setTexture(const char* textureFile);
+  /** @param rotationSpeed the speed at what the crosshair should rotate */
+  void setRotationSpeed(float rotationSpeed) { this->rotationSpeed = rotationSpeed; };
+
+  virtual void tick(float dt);
+  virtual void draw() const;
+
+ private:
+   Material*        material;             //!< a material for the Aim.
+   float            rotationSpeed;        //!< Speed of the Rotation.
+};
+
+#endif /* _AIM_H */
