Index: /orxonox/trunk/src/Makefile.am
===================================================================
--- /orxonox/trunk/src/Makefile.am	(revision 3572)
+++ /orxonox/trunk/src/Makefile.am	(revision 3573)
@@ -35,4 +35,5 @@
 		 track_node.cc \
 		 light.cc \
+		 simple_animation.cc \
 		 story_entities/story_entity.cc \
 		 story_entities/campaign.cc \
@@ -44,4 +45,6 @@
 		 world_entities/terrain.cc \
 		 world_entities/primitive.cc \
+		 world_entities/weapon.cc \
+		 world_entities/projectile.cc \
 		 ai/ai.cc \
 		 lib/coord/p_node.cc \
@@ -76,4 +79,5 @@
 		 track_manager.h \
 		 track_node.h \
+		 simple_animation.h \
 		 story_entities/story_entity.h \
 		 story_entities/story_def.h \
@@ -85,9 +89,9 @@
 		 world_entities/environment.h \
 		 world_entities/skysphere.h \
-		 world_entities/shoot_laser.h \
-		 world_entities/shoot_rocket.h \
 		 world_entities/power_up.h \
 		 world_entities/terrain.h \
 		 world_entities/primitive.h \
+		 world_entities/weapon.h \
+		 world_entities/projectile.h \
 		 ai/ai.h \
 		 network/synchronisable.h \
Index: /orxonox/trunk/src/Makefile.in
===================================================================
--- /orxonox/trunk/src/Makefile.in	(revision 3572)
+++ /orxonox/trunk/src/Makefile.in	(revision 3573)
@@ -56,14 +56,15 @@
 	command_node.$(OBJEXT) keynames.$(OBJEXT) camera.$(OBJEXT) \
 	track_manager.$(OBJEXT) track_node.$(OBJEXT) light.$(OBJEXT) \
-	story_entity.$(OBJEXT) campaign.$(OBJEXT) world.$(OBJEXT) \
-	world_entity.$(OBJEXT) player.$(OBJEXT) environment.$(OBJEXT) \
-	skysphere.$(OBJEXT) terrain.$(OBJEXT) primitive.$(OBJEXT) \
-	ai.$(OBJEXT) p_node.$(OBJEXT) null_parent.$(OBJEXT) \
-	helper_parent.$(OBJEXT) data_tank.$(OBJEXT) fontset.$(OBJEXT) \
-	array.$(OBJEXT) objModel.$(OBJEXT) model.$(OBJEXT) \
-	material.$(OBJEXT) texture.$(OBJEXT) base_entity.$(OBJEXT) \
-	base_object.$(OBJEXT) ini_parser.$(OBJEXT) list.$(OBJEXT) \
-	vector.$(OBJEXT) matrix.$(OBJEXT) curve.$(OBJEXT) \
-	glmenu_imagescreen.$(OBJEXT)
+	simple_animation.$(OBJEXT) story_entity.$(OBJEXT) \
+	campaign.$(OBJEXT) world.$(OBJEXT) world_entity.$(OBJEXT) \
+	player.$(OBJEXT) environment.$(OBJEXT) skysphere.$(OBJEXT) \
+	terrain.$(OBJEXT) primitive.$(OBJEXT) weapon.$(OBJEXT) \
+	projectile.$(OBJEXT) ai.$(OBJEXT) p_node.$(OBJEXT) \
+	null_parent.$(OBJEXT) helper_parent.$(OBJEXT) \
+	data_tank.$(OBJEXT) fontset.$(OBJEXT) array.$(OBJEXT) \
+	objModel.$(OBJEXT) model.$(OBJEXT) material.$(OBJEXT) \
+	texture.$(OBJEXT) base_entity.$(OBJEXT) base_object.$(OBJEXT) \
+	ini_parser.$(OBJEXT) list.$(OBJEXT) vector.$(OBJEXT) \
+	matrix.$(OBJEXT) curve.$(OBJEXT) glmenu_imagescreen.$(OBJEXT)
 orxonox_OBJECTS = $(am_orxonox_OBJECTS)
 orxonox_LDADD = $(LDADD)
@@ -87,10 +88,13 @@
 @AMDEP_TRUE@	./$(DEPDIR)/objModel.Po ./$(DEPDIR)/orxonox.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/p_node.Po ./$(DEPDIR)/player.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/primitive.Po ./$(DEPDIR)/skysphere.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/primitive.Po ./$(DEPDIR)/projectile.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/simple_animation.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/skysphere.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/story_entity.Po ./$(DEPDIR)/terrain.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/texture.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/track_manager.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/track_node.Po ./$(DEPDIR)/vector.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/world.Po ./$(DEPDIR)/world_entity.Po
+@AMDEP_TRUE@	./$(DEPDIR)/weapon.Po ./$(DEPDIR)/world.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/world_entity.Po
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -230,4 +234,5 @@
 		 track_node.cc \
 		 light.cc \
+		 simple_animation.cc \
 		 story_entities/story_entity.cc \
 		 story_entities/campaign.cc \
@@ -239,4 +244,6 @@
 		 world_entities/terrain.cc \
 		 world_entities/primitive.cc \
+		 world_entities/weapon.cc \
+		 world_entities/projectile.cc \
 		 ai/ai.cc \
 		 lib/coord/p_node.cc \
@@ -271,4 +278,5 @@
 		 track_manager.h \
 		 track_node.h \
+		 simple_animation.h \
 		 story_entities/story_entity.h \
 		 story_entities/story_def.h \
@@ -280,9 +288,9 @@
 		 world_entities/environment.h \
 		 world_entities/skysphere.h \
-		 world_entities/shoot_laser.h \
-		 world_entities/shoot_rocket.h \
 		 world_entities/power_up.h \
 		 world_entities/terrain.h \
 		 world_entities/primitive.h \
+		 world_entities/weapon.h \
+		 world_entities/projectile.h \
 		 ai/ai.h \
 		 network/synchronisable.h \
@@ -405,4 +413,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/primitive.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/projectile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple_animation.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/skysphere.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/story_entity.Po@am__quote@
@@ -412,4 +422,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/track_node.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weapon.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/world.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/world_entity.Po@am__quote@
@@ -574,4 +585,36 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive.obj `if test -f 'world_entities/primitive.cc'; then $(CYGPATH_W) 'world_entities/primitive.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/primitive.cc'; fi`
+
+weapon.o: world_entities/weapon.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT weapon.o -MD -MP -MF "$(DEPDIR)/weapon.Tpo" -c -o weapon.o `test -f 'world_entities/weapon.cc' || echo '$(srcdir)/'`world_entities/weapon.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/weapon.Tpo" "$(DEPDIR)/weapon.Po"; else rm -f "$(DEPDIR)/weapon.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='world_entities/weapon.cc' object='weapon.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/weapon.Po' tmpdepfile='$(DEPDIR)/weapon.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o weapon.o `test -f 'world_entities/weapon.cc' || echo '$(srcdir)/'`world_entities/weapon.cc
+
+weapon.obj: world_entities/weapon.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT weapon.obj -MD -MP -MF "$(DEPDIR)/weapon.Tpo" -c -o weapon.obj `if test -f 'world_entities/weapon.cc'; then $(CYGPATH_W) 'world_entities/weapon.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/weapon.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/weapon.Tpo" "$(DEPDIR)/weapon.Po"; else rm -f "$(DEPDIR)/weapon.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='world_entities/weapon.cc' object='weapon.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/weapon.Po' tmpdepfile='$(DEPDIR)/weapon.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o weapon.obj `if test -f 'world_entities/weapon.cc'; then $(CYGPATH_W) 'world_entities/weapon.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/weapon.cc'; fi`
+
+projectile.o: world_entities/projectile.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT projectile.o -MD -MP -MF "$(DEPDIR)/projectile.Tpo" -c -o projectile.o `test -f 'world_entities/projectile.cc' || echo '$(srcdir)/'`world_entities/projectile.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/projectile.Tpo" "$(DEPDIR)/projectile.Po"; else rm -f "$(DEPDIR)/projectile.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='world_entities/projectile.cc' object='projectile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/projectile.Po' tmpdepfile='$(DEPDIR)/projectile.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o projectile.o `test -f 'world_entities/projectile.cc' || echo '$(srcdir)/'`world_entities/projectile.cc
+
+projectile.obj: world_entities/projectile.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT projectile.obj -MD -MP -MF "$(DEPDIR)/projectile.Tpo" -c -o projectile.obj `if test -f 'world_entities/projectile.cc'; then $(CYGPATH_W) 'world_entities/projectile.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/projectile.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/projectile.Tpo" "$(DEPDIR)/projectile.Po"; else rm -f "$(DEPDIR)/projectile.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='world_entities/projectile.cc' object='projectile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/projectile.Po' tmpdepfile='$(DEPDIR)/projectile.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o projectile.obj `if test -f 'world_entities/projectile.cc'; then $(CYGPATH_W) 'world_entities/projectile.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/projectile.cc'; fi`
 
 ai.o: ai/ai.cc
Index: /orxonox/trunk/src/simple_animation.cc
===================================================================
--- /orxonox/trunk/src/simple_animation.cc	(revision 3573)
+++ /orxonox/trunk/src/simple_animation.cc	(revision 3573)
@@ -0,0 +1,229 @@
+
+
+/* 
+   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: ...
+*/
+
+
+#include "simple_animation.h"
+#include "stdincl.h"
+#include "p_node.h"
+
+using namespace std;
+
+/**
+   \brief standard constructor
+   \param the point of the object
+   \param and the orientation of it
+   \param at this time
+*/
+KeyFrame::KeyFrame(Vector* point, Quaternion* orientation, float time)
+{
+  this->setRelCoor(point);
+  this->setRelDir(orientation);
+  this->time = time;
+}
+
+
+/**
+   \brief standard constructor
+   \param the point of the object
+   \param and the orientation of it
+   \param at this time
+   \param function of the velocity of the movement 
+*/
+KeyFrame::KeyFrame(Vector* point, Quaternion* orientation, float time, movementMode mode)
+{
+  this->setRelCoor(point);
+  this->setRelDir(orientation);
+  this->time = time;
+  this->mode = mode;
+}
+
+
+/**
+   \brief standard deconstructor
+*/
+KeyFrame::~KeyFrame()
+{
+}
+
+
+/**
+   \brief sets the important properties of a Keyframe
+   \param the point of the object
+   \param and the orientation of it
+   \param at this time
+*/
+void KeyFrame::set(Vector* point, Quaternion* orientation, float time)
+{
+  this->setRelCoor(point);
+  this->setRelDir(orientation);
+  this->time = time;
+}
+
+
+/**
+   \brief sets the important properties of a Keyframe
+   \param the point of the object
+   \param and the orientation of it
+   \param at this time
+   \param function of the velocity of the movement 
+*/
+void KeyFrame::set(Vector* point, Quaternion* orientation, float time, movementMode mode)
+{
+  this->setRelCoor(point);
+  this->setRelDir(orientation);
+  this->time = time;
+  this->mode = mode;
+}
+
+
+
+/**
+   \brief standard constructor
+*/
+SimpleAnimation::SimpleAnimation (PNode* parent) 
+{
+   this->setClassName ("SimpleAnimation");
+   this->frames = new tList<KeyFrame>();
+   this->localTime = 0;
+   this->bPause = false;
+   this->parent = parent;
+}
+
+
+/**
+   \brief standard deconstructor
+
+*/
+SimpleAnimation::~SimpleAnimation () 
+{
+  KeyFrame* frame = this->frames->enumerate(); 
+  while( frame != NULL) 
+    { 
+      delete frame;
+      frame = frames->nextElement();
+    }
+  delete this->frames;
+}
+
+
+
+/**
+   \brief adds a keyframe with properties
+   \param the point of the object
+   \param and the orientation of it
+   \param at this time
+*/
+void SimpleAnimation::addKeyFrame(Vector* point, Quaternion* orientation, float time)
+{
+  KeyFrame* frame = new KeyFrame(point, orientation, time);
+  this->frames->add(frame);
+}
+
+
+/**
+   \brief adds a keyframe with properties
+   \param the point of the object
+   \param and the orientation of it
+   \param at this time
+   \param function of the velocity of the movement 
+*/
+void SimpleAnimation::addKeyFrame(Vector* point, Quaternion* orientation, float time, movementMode mode)
+{
+  KeyFrame* frame = new KeyFrame(point, orientation, time, mode);
+  this->frames->add(frame);
+}
+
+/**
+   \brief adds a already defined keyframe
+   \param the keyframe to add
+*/
+void SimpleAnimation::addKeyFrame(KeyFrame* frame)
+{
+  this->frames->add(frame);
+}
+
+
+/**
+   \brief clear the list of keyframes, deleting all keyframes included
+*/
+void SimpleAnimation::reset()
+{
+  KeyFrame* frame = this->frames->enumerate(); 
+  while( frame != NULL) 
+    { 
+      delete frame;
+      frame = frames->nextElement();
+    }
+  delete this->frames;
+
+  this->frames = new tList<KeyFrame>();
+  this->localTime = 0;
+  this->bPause = false;
+
+}
+
+/**
+   \brief starts the animation, therefore listens to tick signals
+*/
+void SimpleAnimation::start()
+{}
+
+
+/**
+   \brief stops the animation, immune to tick signals
+*/
+void SimpleAnimation::stop()
+{}
+
+/**
+   \brief stops and then starts the animation from begining
+*/
+void SimpleAnimation::restart()
+{
+  this->localTime = 0;
+  this->bPause = false;
+}
+
+/**
+   \brief pauses the animation until resumed
+*/
+void SimpleAnimation::pause()
+{
+  this->bPause = true;
+}
+
+/**
+   \brief resumes a pause, if not paused, no effect
+*/
+void SimpleAnimation::resume()
+{
+  this->bPause = false;
+}
+
+
+/**
+   \brief heart beat, next animation step
+*/
+void SimpleAnimation::tick(float time)
+{
+  if(!this->bPause)
+    {
+
+
+
+    }
+}
Index: /orxonox/trunk/src/simple_animation.h
===================================================================
--- /orxonox/trunk/src/simple_animation.h	(revision 3573)
+++ /orxonox/trunk/src/simple_animation.h	(revision 3573)
@@ -0,0 +1,72 @@
+/*! 
+    \file simple_animation.h
+    \brief A class to interpolate the movement of an object following descrete points in room and time
+    \todo implement it
+
+    This class has been done to animate some movement, works best for short 
+    distances.
+*/
+
+#ifndef _SIMPLE_ANIMATION_H
+#define _SIMPLE_ANIMATION_H
+
+#include "base_object.h"
+#include "p_node.h"
+#include "list.h"
+
+
+typedef enum movementMode{LINEAR=0, EXP, NEG_EXP, SIN, COS};
+
+
+//! KeyFrame Class
+/**
+   This represents one point with orientation of the animation
+*/
+class KeyFrame : public PNode {
+ public:
+  KeyFrame(Vector* point, Quaternion* orientation, float time);
+  KeyFrame(Vector* point, Quaternion* orientation, float time, movementMode mode); 
+  virtual ~KeyFrame();
+
+  void set(Vector* point, Quaternion* orientation, float time);
+  void set(Vector* point, Quaternion* orientation, float time, movementMode mode);
+  
+ private:
+  float time;
+  movementMode mode;
+};
+
+
+//! Animation Class
+/**
+   Helps you making some small animation
+*/
+class SimpleAnimation : public BaseObject {
+  
+ public:
+  SimpleAnimation(PNode* parent);
+  virtual ~SimpleAnimation();
+
+  void addKeyFrame(Vector* point, Quaternion* orientation, float time);
+  void addKeyFrame(Vector* point, Quaternion* orientation, float time, movementMode mode);
+  void addKeyFrame(KeyFrame* frame);
+  void reset();
+
+  void start();
+  void stop();
+  void restart();
+  void pause();
+  void resume();
+
+  void tick(float time);
+
+ private:
+  bool bPause;                     //<! is set, when there is a pause
+  tList<KeyFrame>* frames;        //<! where keyframes are stored in
+  float localTime;
+  PNode* parent;
+  
+
+};
+
+#endif /* _SIMPLE_ANIMATION_H */
Index: /orxonox/trunk/src/story_entities/world.cc
===================================================================
--- /orxonox/trunk/src/story_entities/world.cc	(revision 3572)
+++ /orxonox/trunk/src/story_entities/world.cc	(revision 3573)
@@ -44,5 +44,5 @@
 {
   this->init(name, -1);
-  NullParent* np = NullParent::getInstance();
+  //NullParent* np = NullParent::getInstance();
 }
 
Index: /orxonox/trunk/src/world_entities/environment.h
===================================================================
--- /orxonox/trunk/src/world_entities/environment.h	(revision 3572)
+++ /orxonox/trunk/src/world_entities/environment.h	(revision 3573)
@@ -8,11 +8,4 @@
 {
   friend class World;
-
- private:
-  float xCor;
-  float yCor;
-  float zCor;
-
-  float mountainTest[10][10];
 
  public:
Index: /orxonox/trunk/src/world_entities/projectile.cc
===================================================================
--- /orxonox/trunk/src/world_entities/projectile.cc	(revision 3573)
+++ /orxonox/trunk/src/world_entities/projectile.cc	(revision 3573)
@@ -0,0 +1,64 @@
+
+
+/* 
+   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: 
+*/
+
+
+#include "projectile.h"
+#include "stdincl.h"
+#include "world_entity.h"
+#include "vector.h"
+#include "objModel.h"
+
+using namespace std;
+
+
+
+Projectile::Projectile () : WorldEntity()
+{
+  this->model = new OBJModel("../data/models/fighter.obj");
+}
+
+
+
+Projectile::~Projectile () 
+{
+  delete this->model;
+}
+
+void Projectile::tick (float time) {}
+
+void Projectile::hit (WorldEntity* weapon, Vector loc) {}
+
+void Projectile::destroy () {}
+
+void Projectile::collide (WorldEntity* other,  Uint32 ownhitflags, Uint32 otherhitflags) {}
+
+void Projectile::draw () 
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  float matrix[4][4];
+  
+  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+  //rotate
+  this->getAbsDir().matrix (matrix);
+  glMultMatrixf((float*)matrix);
+  
+  this->model->draw();
+
+  glPopMatrix();
+}
+
Index: /orxonox/trunk/src/world_entities/projectile.h
===================================================================
--- /orxonox/trunk/src/world_entities/projectile.h	(revision 3573)
+++ /orxonox/trunk/src/world_entities/projectile.h	(revision 3573)
@@ -0,0 +1,29 @@
+/*! 
+    \projectile.h
+    \brief a projectile, that is been shooted by a weapon
+*/
+
+#ifndef _PROJECTILE_H
+#define _PROJECTILE_H
+
+#include "world_entity.h"
+
+
+class Projectile : public WorldEntity 
+{
+  friend class World;
+
+ public:
+  Projectile ();
+  virtual ~Projectile ();
+
+  
+  virtual void tick (float time);
+  virtual void hit (WorldEntity* weapon, Vector loc);
+  virtual void destroy ();
+  virtual void collide (WorldEntity* other,  Uint32 ownhitflags, Uint32 otherhitflags);
+  virtual void draw ();
+
+};
+
+#endif /* _PROJECTILE_H */
Index: xonox/trunk/src/world_entities/shoot_laser.cc
===================================================================
--- /orxonox/trunk/src/world_entities/shoot_laser.cc	(revision 3572)
+++ 	(revision )
@@ -1,153 +1,0 @@
-
-
-/* 
-   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: 
-*/
-
-
-
-
-#include <GL/glut.h>
-#include <iostream>
-
-#include "stdincl.h"
-#include "data_tank.h"
-
-#include "shoot_laser.h"
-
-using namespace std;
-
-
-
-ShootLaser::ShootLaser () 
-{
-  lastShoot = null;
-  step = 1.0;
-  inhibitor = 0;
-}
-
-
-ShootLaser::~ShootLaser () {}
-
-
-void ShootLaser::drawShoot() 
-{
-
-  //cout << "ShootLaser::drawShoot" << endl;
-  /* now draw all the shoots (many) */
-  shoot* tmpShoot = lastShoot;
-  shoot* lastRef = null;
-  while( tmpShoot != null )
-    {
-      glPushMatrix(); 
-      glTranslatef(tmpShoot->xCor, tmpShoot->yCor, tmpShoot->zCor);
-      tmpShoot->xCor+=tmpShoot->xVel;
-      tmpShoot->yCor+=tmpShoot->yVel;
-      glScalef(0.1, 0.1, 0.1);
-      glutWireCube(1.0);
-      glPopMatrix();
-
-      /* garbage collection: look if shoot is outside world */
-      /* fix1: weak boundaries check all four sides */
-      /* fix2: conditions, that a struct tree can be cut off */
-      /* fix3: more efficent and nicer please */
-      if (tmpShoot->yCor - DataTank::yOffset > 20) 
-	{
-	  /* normal case: delete one element, link the others */
-	  if (lastRef != null) 
-	    {
-	      //cout << "garbage collection" << endl;
-	      lastRef->next = tmpShoot->next;
-	      delete tmpShoot;
-	      tmpShoot = lastRef->next;
-	      //cout << "garbage collection left" << endl;
-	    }
-	  else
-	    {
-	      /* special case: first element to be processed */
-	      //cout << "garbage collecton: first el in queue" << endl;
-	      lastRef = tmpShoot->next;
-	      delete tmpShoot;
-	      tmpShoot = lastRef;
-	      lastShoot = tmpShoot;
-	      if (tmpShoot != null) 
-		{
-		  tmpShoot = tmpShoot->next;
-		  //cout << "noch nich null" << endl;
-		}
-	      else 
-		{
-		  lastRef = null;
-		  tmpShoot = null;
-		  lastShoot = null;
-		  //cout << "endl null" << endl;
-		}
-	      
-	      //cout << "garbage collection: firtst el in queue left" << endl;
-	    }
-	}
-      else 
-	{
-	  lastRef = tmpShoot;
-	  tmpShoot = tmpShoot->next;
-	}
-    }
-  //cout << "ShootLaser::drawShoot - finished" << endl;
-}
-
-
-void ShootLaser::addShoot(shoot* sh) 
-{
-  sh->next = null;
-  lastShoot = sh;
-}
-
-void ShootLaser::addShoot(float x, float y, float z)
-{
-  //cout << "ShootLaser::addShoot" << endl;
-  shoot* sh = new shoot;
-  sh->xCor = x; sh->yCor = y; sh->zCor = z;
-  sh->xVel = 0; sh->yVel = .4/step; sh->zVel = 0;
-  sh->next = lastShoot;
-  lastShoot = sh;
-}
-
-void ShootLaser::addShootExt(float x, float y, float z, 
-			     float xVel, float yVel, float zVel)
-{
-  //cout << "ShootLaser::addShootExtended" << endl;
-  shoot* sh = new shoot;
-  sh->xCor = x; sh->yCor = y; sh->zCor = z;
-  sh->xVel = xVel/step; sh->yVel = yVel/step; sh->zVel = zVel/step;
-  sh->next = lastShoot;
-  lastShoot = sh;
-}
-
-void ShootLaser::setShootStep(float step) 
-{
-  cout << "ShootLaser::setShootStep to " << step << endl;
-  this->step = step;
-  cout << "ShootLaser::setShootStep end " << step << endl;
-}
-
-
-/* Exterminate shoot from game, implement this method  */
-/* if you like to add animatiion */
-void ShootLaser::removeShoot(shoot* sh)
-{
-  glPushMatrix(); 
-  glTranslatef(sh->xCor, sh->yCor, sh->zCor);
-  glutWireCube(1.0);
-  glPopMatrix();
-}
Index: xonox/trunk/src/world_entities/shoot_laser.h
===================================================================
--- /orxonox/trunk/src/world_entities/shoot_laser.h	(revision 3572)
+++ 	(revision )
@@ -1,42 +1,0 @@
-
-#ifndef _SHOOT_LASER_H
-#define _SHOOT_LASER_H
-
-
-class ShootLaser {
-
- public:
-  
-  /* a list of all shoot-amental objects */
-  struct shoot {
-    shoot *next;
-    float xCor;
-    float yCor;
-    float zCor;    
-    float xVel;
-    float yVel;
-    float zVel;
-    float collisionRadius;
-  };
-  shoot* lastShoot;
-
-  ShootLaser ();
-  ~ShootLaser ();
-
-  int inhibitor;
-
-  void drawShoot(void);
-  void addShoot(shoot* sh);
-  void addShoot(float x, float y, float z);
-  void addShootExt(float x, float y, float z, float xVel, float yVel, float zVel);
-  void setShootStep(float step);
-  void removeShoot(shoot* sh);
-
-
- private:
-
-  float step;
-
-};
-
-#endif /* _SHOOT_LASER_H */
Index: xonox/trunk/src/world_entities/shoot_rocket.cc
===================================================================
--- /orxonox/trunk/src/world_entities/shoot_rocket.cc	(revision 3572)
+++ 	(revision )
@@ -1,220 +1,0 @@
-
-
-/* 
-   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
-*/
-
-
-#include <iostream>
-#include <math.h>
-#include <GL/glut.h>
-
-#include "stdincl.h"
-#include "data_tank.h"
-#include "npc.h"
-
-#include "shoot_rocket.h"
-
-using namespace std;
-
-
-
-ShootRocket::ShootRocket ()
-{
-  lastShoot = null;
-  step = 1.0;
-  inhibitor =0;
-  rotateAngle = 0.0;
-}
-
-
-ShootRocket::~ShootRocket () {}
-
-
-void ShootRocket::drawShoot() 
-{
-
-  //cout << "ShootRocket::drawShoot" << endl;
-  /* now draw all the shoots (many) */
-  shoot* tmpShoot = lastShoot;
-  shoot* lastRef = null;
-  while( tmpShoot != null )
-    {
-      glPushMatrix(); 
-      glTranslatef(tmpShoot->xCor, tmpShoot->yCor, tmpShoot->zCor);
-      tmpShoot->age+=step;
-      switch (tmpShoot->type)
-	{
-	case BACKPARABLE:
-	  tmpShoot->xCor+=tmpShoot->xVel;
-	  tmpShoot->yCor+=tmpShoot->yVel;
-	  tmpShoot->xVel+=tmpShoot->xAcc;
-	  tmpShoot->yVel+=tmpShoot->yAcc;
-	  break;
-	
-	case SIDEACC:
-	  if (tmpShoot->xVel >= .01 || tmpShoot->xVel <= -.01)
-	    {
-	      tmpShoot->xCor+=tmpShoot->xVel;
-	      tmpShoot->yCor+=tmpShoot->yVel;
-	      tmpShoot->xVel*=tmpShoot->xAcc;
-	    }
-	  else
-	    {
-	      tmpShoot->xCor+=tmpShoot->xVel;
-	      tmpShoot->yCor+=tmpShoot->yVel;
-	      tmpShoot->yVel+=tmpShoot->yVel*tmpShoot->yAcc;
-	    }
-	  break;
-	
-	case ROTATER:
-	  tmpShoot->xCor+=tmpShoot->xVel;
-	  tmpShoot->yCor+=tmpShoot->yVel;
-	  tmpShoot->zCor+=tmpShoot->zVel;
-	  break;
-	
-	}
-      
-      glScalef(0.1, 0.1, 0.1);
-      glutWireCube(1.0);
-      glPopMatrix();
-
-      /* garbage collection: look if shoot is outside world */
-      /* fix1: weak boundaries check all four sides */
-      /* fix2: conditions, that a struct tree can be cut off */
-      /* fix3: more efficent and nicer please */
-      if (tmpShoot->age > tmpShoot->lifetime) 
-	{
-	  /* normal case: delete one element, link the others */
-	  if (lastRef != null) 
-	    {
-	      //cout << "garbage collection" << endl;
-	      lastRef->next = tmpShoot->next;
-	      delete tmpShoot;
-	      tmpShoot = lastRef->next;
-	      //cout << "garbage collection left" << endl;
-	    }
-	  else
-	    {
-	      /* special case: first element to be processed */
-	      //cout << "garbage collecton: first el in queue" << endl;
-	      lastRef = tmpShoot->next;
-	      delete tmpShoot;
-	      tmpShoot = lastRef;
-	      lastShoot = tmpShoot;
-	      if (tmpShoot != null) 
-		{
-		  tmpShoot = tmpShoot->next;
-		  //cout << "noch nich null" << endl;
-		}
-	      else 
-		{
-		  lastRef = null;
-		  tmpShoot = null;
-		  lastShoot = null;
-		  //cout << "endl null" << endl;
-		}
-	      
-	      //cout << "garbage collection: firtst el in queue left" << endl;
-	    }
-	}
-      else 
-	{
-	  lastRef = tmpShoot;
-	  tmpShoot = tmpShoot->next;
-	}
-    }
-  //cout << "ShootRocket::drawShoot - finished" << endl;
-}
-
-
-void ShootRocket::addShoot(shoot* sh) 
-{
-  sh->next = null;
-  lastShoot = sh;
-}
-
-void ShootRocket::addBackParable(float x, float y, float z)
-{
-  
-  //cout << "ShootRocket::addShoot" << endl;
-  shoot* sh = new shoot;
-  sh->type = BACKPARABLE;
-  sh->xCor = x; sh->yCor = y; sh->zCor = z;
-  sh->xVel = (-1+(float)rand() / 1000000000/step)/5; 
-  sh->yVel = -.3;
-  sh->zVel = (1-(float)rand() / 1000000000/step)/5;
-  sh->xAcc = 0; sh->yAcc = .01/step; sh->zAcc = 0;
-  sh->age=0;
-  sh->lifetime=5; 
-  sh->next = lastShoot;
-  lastShoot = sh;
-  }
-void ShootRocket::addSideAcc(float x, float y, float z, enum RocketDirection direction)
-{
-  //cout << "ShootRocket::addShoot" << endl;
-  shoot* sh = new shoot;
-  sh->type = SIDEACC;
-  sh->xCor = x; sh->yCor = y; sh->zCor = z;
-  switch (direction)
-    {
-    case LEFT:
-      sh->xVel = -.5; sh->yVel = .05; sh->zVel = 0;
-      break;
-    case RIGHT:
-      sh->xVel = .5; sh->yVel = .05; sh->zVel = 0;
-      break;
-    }
-  sh->xAcc = .9; sh->yAcc = .02; sh->zAcc = 0;
-  sh->age=0;
-  sh->lifetime=10; 
-  sh->next = lastShoot;
-  lastShoot = sh;
-}
-
-void ShootRocket::addRotater(float x, float y, float z)
-{
-  
-  static float radius = 2;
-  rotateAngle+=.1;
-  //cout << "ShootRocket::addShoot" << endl;
-  shoot* sh = new shoot;
-  sh->type = ROTATER;
-  sh->xCor = x+radius*sin(rotateAngle); sh->yCor = y; sh->zCor = z+radius*cos(rotateAngle);
-  sh->xVel = 1*cos(rotateAngle)*step;
-  sh->yVel = 4*step;
-  sh->zVel = 1*sin(rotateAngle)*step;
-  sh->xAcc = 1.01; sh->yAcc = 1- step; sh->zAcc = 1.01;
-  sh->age=0;
-  sh->lifetime=10; 
-  sh->next = lastShoot;
-  lastShoot = sh;
-}
-
-void ShootRocket::setShootStep(float step) 
-{
-  cout << "ShootRocket::setShootStep to " << step << endl;
-  this->step = step;
-}
-
-
-/* Exterminate shoot from game, implement this method  */
-/* if you like to add animatiion */
-void ShootRocket::removeShoot(shoot* sh)
-{
-  glPushMatrix(); 
-  glTranslatef(sh->xCor, sh->yCor, sh->zCor);
-  glutWireCube(1.0);
-  glPopMatrix();
-}
Index: xonox/trunk/src/world_entities/shoot_rocket.h
===================================================================
--- /orxonox/trunk/src/world_entities/shoot_rocket.h	(revision 3572)
+++ 	(revision )
@@ -1,56 +1,0 @@
-
-#ifndef _SHOOT_ROCKET_H
-#define _SHOOT_ROCKET_H
-
-
-
-enum RocketType { HOMING, SIDEACC, BACKPARABLE, ROTATER};
-enum RocketDirection {LEFT, RIGHT, UP, DOWN};
-
-
-class ShootRocket {
-
- public:
-  
-  /* a list of all shoot-amental objects */
-  struct shoot {
-    enum RocketType type;
-    shoot *next;
-    float xCor;
-    float yCor;
-    float zCor;    
-    float xVel;
-    float yVel;
-    float zVel;
-    float xAcc;
-    float yAcc;
-    float zAcc;
-    float age;
-    float lifetime;
-    float collisionRadius;
-  };
-  shoot* lastShoot;
-  
-  ShootRocket ();
-  ~ShootRocket ();
-  
-  int inhibitor;
-  float rotateAngle;
-
-  void drawShoot(void);
-  void addShoot(shoot* sh);
-  void addBackParable(float x, float y, float z);
-  void addSideAcc(float x, float y, float z, enum RocketDirection direction);
-  void addRotater(float x, float y, float z);
-
-  void setShootStep(float step);
-  void removeShoot(shoot* sh);
-
-
- private:
-
-  float step;
-
-};
-
-#endif /* _SHOOT_ROCKET_H */
Index: /orxonox/trunk/src/world_entities/weapon.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapon.cc	(revision 3573)
+++ /orxonox/trunk/src/world_entities/weapon.cc	(revision 3573)
@@ -0,0 +1,64 @@
+
+
+/* 
+   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: 
+*/
+
+
+#include "weapon.h"
+#include "stdincl.h"
+#include "world_entity.h"
+#include "vector.h"
+#include "objModel.h"
+
+using namespace std;
+
+
+
+Weapon::Weapon () : WorldEntity()
+{
+  this->model = new OBJModel("../data/models/fighter.obj");
+}
+
+
+
+Weapon::~Weapon () 
+{
+  delete this->model;
+}
+
+void Weapon::tick (float time) {}
+
+void Weapon::hit (WorldEntity* weapon, Vector loc) {}
+
+void Weapon::destroy () {}
+
+void Weapon::collide (WorldEntity* other,  Uint32 ownhitflags, Uint32 otherhitflags) {}
+
+void Weapon::draw () 
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  float matrix[4][4];
+  
+  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+  //rotate
+  this->getAbsDir().matrix (matrix);
+  glMultMatrixf((float*)matrix);
+  
+  this->model->draw();
+
+  glPopMatrix();
+}
+
Index: /orxonox/trunk/src/world_entities/weapon.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapon.h	(revision 3573)
+++ /orxonox/trunk/src/world_entities/weapon.h	(revision 3573)
@@ -0,0 +1,49 @@
+/*! 
+    \file weapon.h
+    \brief a weapon that a player can use
+
+    A Player has a list of weapons, that can be choosen to shoot projectiles
+    (projectiles.{cc,h}) at ennemies. These weapons can be shooted sequentially
+    or (if able) combined. Therefore you can choose the weapon mode = choose
+    a weapon.
+
+    A weapon is characterized by:
+     o firing-rate: the initial firing rate of a weapon (1/s = Herz)
+     o slowdown-factor: this is a factor d: exp(-d*x), d is element of all positive R. it determines how fast the firing-rate will slow down. if no slowdown: d=0, the bigger d is, the faster the weapon will slow down!
+     o energy-consumption: this determines the energy that has to be used to produce this projectile = costs per projectile
+    
+    Furthermore there are some other attributes, that will help to represent a firing
+    weapon in this world:
+     o sound file/ressource: this is a pointer to the sound-file/ressource. however it may be represented
+     
+*/
+
+
+#ifndef _WEAPON_H
+#define _WEAPON_H
+
+#include "world_entity.h"
+
+
+class Weapon : public WorldEntity 
+{
+  friend class World;
+
+ public:
+  Weapon ();
+  virtual ~Weapon ();
+  
+  virtual void tick (float time);
+  virtual void hit (WorldEntity* weapon, Vector loc);
+  virtual void destroy ();
+  virtual void collide (WorldEntity* other,  Uint32 ownhitflags, Uint32 otherhitflags);
+  virtual void draw ();
+
+ private:
+  float firingRate;
+  float slowDownFactor;
+  int energyConsumption;
+
+};
+
+#endif /* _WEAPON_H */
