Index: orxonox/trunk/src/Makefile.am
===================================================================
--- orxonox/trunk/src/Makefile.am	(revision 3749)
+++ orxonox/trunk/src/Makefile.am	(revision 3750)
@@ -46,4 +46,5 @@
 		 world_entities/weapon.cc \
 		 world_entities/projectile.cc \
+		 world_entities/satellite.cc \
 		 world_entities/character_attributes.cc \
 		 world_entities/test_gun.cc \
@@ -97,4 +98,5 @@
 		 world_entities/weapon.h \
 		 world_entities/projectile.h \
+		 world_entities/satellite.h \
 		 world_entities/character_attributes.h \
 		 world_entities/test_gun.h \
Index: orxonox/trunk/src/Makefile.in
===================================================================
--- orxonox/trunk/src/Makefile.in	(revision 3749)
+++ orxonox/trunk/src/Makefile.in	(revision 3750)
@@ -60,7 +60,8 @@
 	world_entity.$(OBJEXT) player.$(OBJEXT) environment.$(OBJEXT) \
 	skysphere.$(OBJEXT) terrain.$(OBJEXT) weapon.$(OBJEXT) \
-	projectile.$(OBJEXT) character_attributes.$(OBJEXT) \
-	test_gun.$(OBJEXT) test_bullet.$(OBJEXT) ai.$(OBJEXT) \
-	p_node.$(OBJEXT) null_parent.$(OBJEXT) helper_parent.$(OBJEXT) \
+	projectile.$(OBJEXT) satellite.$(OBJEXT) \
+	character_attributes.$(OBJEXT) test_gun.$(OBJEXT) \
+	test_bullet.$(OBJEXT) ai.$(OBJEXT) p_node.$(OBJEXT) \
+	null_parent.$(OBJEXT) helper_parent.$(OBJEXT) \
 	data_tank.$(OBJEXT) graphics_engine.$(OBJEXT) light.$(OBJEXT) \
 	fontset.$(OBJEXT) array.$(OBJEXT) objModel.$(OBJEXT) \
@@ -96,4 +97,5 @@
 @AMDEP_TRUE@	./$(DEPDIR)/projectile.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/resource_manager.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/satellite.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/simple_animation.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/skysphere.Po \
@@ -253,4 +255,5 @@
 		 world_entities/weapon.cc \
 		 world_entities/projectile.cc \
+		 world_entities/satellite.cc \
 		 world_entities/character_attributes.cc \
 		 world_entities/test_gun.cc \
@@ -304,4 +307,5 @@
 		 world_entities/weapon.h \
 		 world_entities/projectile.h \
+		 world_entities/satellite.h \
 		 world_entities/character_attributes.h \
 		 world_entities/test_gun.h \
@@ -439,4 +443,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/projectile.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resource_manager.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/satellite.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@
@@ -628,4 +633,20 @@
 @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`
+
+satellite.o: world_entities/satellite.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT satellite.o -MD -MP -MF "$(DEPDIR)/satellite.Tpo" -c -o satellite.o `test -f 'world_entities/satellite.cc' || echo '$(srcdir)/'`world_entities/satellite.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/satellite.Tpo" "$(DEPDIR)/satellite.Po"; else rm -f "$(DEPDIR)/satellite.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='world_entities/satellite.cc' object='satellite.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/satellite.Po' tmpdepfile='$(DEPDIR)/satellite.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 satellite.o `test -f 'world_entities/satellite.cc' || echo '$(srcdir)/'`world_entities/satellite.cc
+
+satellite.obj: world_entities/satellite.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT satellite.obj -MD -MP -MF "$(DEPDIR)/satellite.Tpo" -c -o satellite.obj `if test -f 'world_entities/satellite.cc'; then $(CYGPATH_W) 'world_entities/satellite.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/satellite.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/satellite.Tpo" "$(DEPDIR)/satellite.Po"; else rm -f "$(DEPDIR)/satellite.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='world_entities/satellite.cc' object='satellite.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/satellite.Po' tmpdepfile='$(DEPDIR)/satellite.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 satellite.obj `if test -f 'world_entities/satellite.cc'; then $(CYGPATH_W) 'world_entities/satellite.cc'; else $(CYGPATH_W) '$(srcdir)/world_entities/satellite.cc'; fi`
 
 character_attributes.o: world_entities/character_attributes.cc
Index: orxonox/trunk/src/defs/debug.h
===================================================================
--- orxonox/trunk/src/defs/debug.h	(revision 3749)
+++ orxonox/trunk/src/defs/debug.h	(revision 3750)
@@ -65,5 +65,5 @@
 #define DEBUG_MODULE_LOAD               0
 
-#define DEBUG_MODULE_IMPORTER           0
+#define DEBUG_MODULE_IMPORTER           2
 #define DEBUG_MODULE_TRACK_MANAGER      0
 #define DEBUG_MODULE_GARBAGE_COLLECTOR  0
Index: orxonox/trunk/src/lib/graphics/importer/model.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/importer/model.cc	(revision 3749)
+++ orxonox/trunk/src/lib/graphics/importer/model.cc	(revision 3750)
@@ -124,5 +124,5 @@
       if (counter == groupNumber)
 	{
-	  PRINTF(4)("Drawing model number %i named %s\n", counter, walker->name);
+	  PRINTF(2)("Drawing model number %i named %s\n", counter, walker->name);
 	  glCallList (walker->listNumber);
 	  return;
Index: orxonox/trunk/src/simple_animation.h
===================================================================
--- orxonox/trunk/src/simple_animation.h	(revision 3749)
+++ orxonox/trunk/src/simple_animation.h	(revision 3750)
@@ -42,15 +42,19 @@
 */
 typedef struct Animation {
+
   WorldEntity* object;
+  Vector* lastPosition;
+  Vector* tmpVect;
+  float deltaT;
+  float localTime;
+
+  tList<KeyFrame>* frames;
   KeyFrame* currentFrame;
   KeyFrame* lastFrame;
-  Vector* lastPosition;
-  Vector* tmpVect;
-  tList<KeyFrame>* frames;
+
+  bool bRunning;
+
   animationMode animMode;
   movementMode movMode;
-  bool bRunning;
-  float deltaT;
-  float localTime;
 };
 
Index: orxonox/trunk/src/story_entities/world.cc
===================================================================
--- orxonox/trunk/src/story_entities/world.cc	(revision 3749)
+++ orxonox/trunk/src/story_entities/world.cc	(revision 3750)
@@ -30,4 +30,5 @@
 #include "environment.h"
 #include "skysphere.h"
+#include "satellite.h"
 #include "terrain.h"
 #include "light.h"
@@ -442,11 +443,21 @@
 
 
-
-	    /*
-	    WorldEntity* a = new Environment();
-	    this->localPlayer->addChild(a);
-	    a->setRelCoor(new Vector(10.0, 2.0, 1.0));
-	    this->spawn(a);
-	    */
+ 	    WorldEntity* baseNode = new Satellite(Vector(1,0,1), 1.2);
+	    this->localPlayer->addChild(baseNode);
+	    baseNode->setRelCoor(new Vector(10.0, 2.0, 1.0));
+	    this->spawn(baseNode);
+
+ 	    WorldEntity* secondNode = new Satellite(Vector(0,0,1), 1.0);
+	    baseNode->addChild(secondNode);
+	    secondNode->setRelCoor(new Vector(0.0, 3.0, 0.0));
+	    this->spawn(secondNode);
+
+
+ 	    WorldEntity* thirdNode = new Satellite(Vector(0,0,1), 2.0);
+	    secondNode->addChild(thirdNode);
+	    thirdNode->setRelCoor(new Vector(2.0, 0.0, 0.0));
+	    this->spawn(thirdNode);
+
+
 
 	    WorldEntity* b = new Environment();
@@ -462,13 +473,4 @@
 	    
 	   
-	    this->simpleAnimation = SimpleAnimation::getInstance();
-
-	    /*
-	      frame->position = point;
-	      frame->orientation = orientation;
-	      frame->time = time;
-	      frame->mode = DEFAULT_ANIMATION_MODE;
-	    */
-
 	    KeyFrame* f1 = new KeyFrame;
 	    f1->position = new Vector(-1.1, 0.0, 2.6);
@@ -506,6 +508,4 @@
 	    this->simpleAnimation->addKeyFrame(f4);
 	    this->simpleAnimation->start();
-	    //this->simpleAnimation->addKeyFrame(f3);
-	    //this->simpleAnimation->addKeyFrame(f2);
 	    this->simpleAnimation->animatorEnd();
 
Index: orxonox/trunk/src/world_entities/player.cc
===================================================================
--- orxonox/trunk/src/world_entities/player.cc	(revision 3749)
+++ orxonox/trunk/src/world_entities/player.cc	(revision 3750)
@@ -46,4 +46,5 @@
   */
   this->model = (Model*)ResourceManager::getInstance()->load("models/reaplow.obj", OBJ, RP_CAMPAIGN);
+  //this->model = (Model*)ResourceManager::getInstance()->load("models/weapon_packet.obj", OBJ, RP_CAMPAIGN);
   travelSpeed = 15.0;
   velocity = new Vector();
@@ -147,4 +148,6 @@
   this->model->draw();
   glPopMatrix();
+
+  this->activeWeapon->draw();
 }
 
Index: orxonox/trunk/src/world_entities/satellite.cc
===================================================================
--- orxonox/trunk/src/world_entities/satellite.cc	(revision 3750)
+++ orxonox/trunk/src/world_entities/satellite.cc	(revision 3750)
@@ -0,0 +1,91 @@
+
+
+/* 
+   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 "satellite.h"
+
+#include "objModel.h"
+#include "list.h"
+#include "vector.h"
+
+
+using namespace std;
+
+/**
+   \brief standard constructor
+*/
+Satellite::Satellite (Vector axis, float speed)
+{
+  this->setClassName ("Satellite");
+  this->model = (Model*) ResourceManager::getInstance()->load("cube", RP_LEVEL);
+  this->speed = speed;
+  this->axis = new Vector();
+  *this->axis = axis;
+}
+
+/**
+   \brief standard destructor
+*/
+Satellite::~Satellite ()
+{
+  // if( collisioncluster != NULL) delete collisioncluster;
+  if (this->model)
+    ResourceManager::getInstance()->unload(this->model);
+}
+
+
+/**
+   \brief 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 Satellite::tick(float time) 
+{
+  float w = this->speed * M_PI;
+
+  Quaternion rotation(w * time, *this->axis); 
+  Quaternion v = this->getRelDir();
+  
+  this->setRelDir(v * rotation);
+}
+
+
+/**
+   \brief 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 Satellite::draw() 
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  float matrix[4][4];
+  
+  /* translate */
+  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/satellite.h
===================================================================
--- orxonox/trunk/src/world_entities/satellite.h	(revision 3750)
+++ orxonox/trunk/src/world_entities/satellite.h	(revision 3750)
@@ -0,0 +1,37 @@
+/*! 
+    \file world_entity.h
+    \brief Definition of the basic WorldEntity
+*/
+
+#ifndef _SATELLITE_H
+#define _SATELLITE_H
+
+#include "world_entity.h"
+#include "comincl.h"
+#include "resource_manager.h"
+
+
+class CharacterAttributes;
+class Model;
+
+
+//! Basic class from which all interactive stuff in the world is derived from
+class Satellite : public WorldEntity
+{	
+  friend class World;
+
+ public:
+  Satellite (Vector axis, float speed);
+  virtual ~Satellite ();
+
+  virtual void draw ();
+  virtual void tick (float time);
+  
+ private:
+  Vector* axis;
+  float speed;
+  
+
+};
+
+#endif /* _SATELLITE_H */
Index: orxonox/trunk/src/world_entities/test_gun.cc
===================================================================
--- orxonox/trunk/src/world_entities/test_gun.cc	(revision 3749)
+++ orxonox/trunk/src/world_entities/test_gun.cc	(revision 3750)
@@ -42,4 +42,5 @@
   :  Weapon (parent, coordinate, direction) 
 {
+  this->model = (Model*)ResourceManager::getInstance()->load("models/weapon_packet.obj", OBJ, RP_CAMPAIGN);
   this->idleTime = 0.2f;
 }
@@ -146,4 +147,19 @@
 */
 void TestGun::draw () 
-{}
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  float matrix[4][4];
+  
+  /* translate */
+  glTranslatef (this->getAbsCoor ().x, 
+		this->getAbsCoor ().y, 
+		this->getAbsCoor ().z);
+  /* rotate */
+  this->getAbsDir ().matrix (matrix);
+  glMultMatrixf((float*)matrix);
+  
+  this->model->draw(2);
+  glPopMatrix();
+}
 
