Index: /orxonox/trunk/src/Makefile.am
===================================================================
--- /orxonox/trunk/src/Makefile.am	(revision 3487)
+++ /orxonox/trunk/src/Makefile.am	(revision 3488)
@@ -4,4 +4,5 @@
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/story_entities
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib
+AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/coord
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/data
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/gaphics
@@ -29,7 +30,4 @@
 		 keynames.cc \
 		 camera.cc \
-		 p_node.cc \
-		 null_parent.cc \
-		 helper_parent.cc \
 		 track_manager.cc \
 		 light.cc \
@@ -42,4 +40,8 @@
 		 world_entities/skysphere.cc \
 		 ai/ai.cc \
+		 lib/coord/p_node.cc \
+		 lib/coord/null_parent.cc \
+		 lib/coord/helper_parent.cc \
+		 lib/data/data_tank.cc \
 		 lib/graphics/importer/array.cc \
 		 lib/graphics/importer/objModel.cc \
@@ -47,5 +49,4 @@
 		 lib/graphics/importer/material.cc \
 		 lib/graphics/importer/texture.cc \
-		 lib/data/data_tank.cc \
 		 lib/lang/base_entity.cc \
 		 lib/lang/base_object.cc \
@@ -61,7 +62,4 @@
 		 game_loader.h \
 		 track_manager.h \
-		 p_node.h \
-		 null_parent.h \
-		 helper_parent.h \
 		 glincl.h \
                  ability.h \
@@ -89,4 +87,7 @@
 		 defs/error.h \
 		 defs/debug.h \
+		 lib/coord/p_node.h \
+		 lib/coord/null_parent.h \
+		 lib/coord/helper_parent.h \
 		 lib/data/data_tank.h \
 		 lib/lang/base_entity.h \
@@ -111,7 +112,7 @@
 endif
 if SUB_PROJECTS
-  SUB_PROGS = importer \
-	      gui \
+  SUB_PROGS = gui \
 	      $(GTK_PROGS)
+##lib/graphics/importer \
 else
   SUB_PROGS = 
Index: /orxonox/trunk/src/Makefile.in
===================================================================
--- /orxonox/trunk/src/Makefile.in	(revision 3487)
+++ /orxonox/trunk/src/Makefile.in	(revision 3488)
@@ -55,14 +55,14 @@
 am_orxonox_OBJECTS = orxonox.$(OBJEXT) game_loader.$(OBJEXT) \
 	command_node.$(OBJEXT) keynames.$(OBJEXT) camera.$(OBJEXT) \
-	p_node.$(OBJEXT) null_parent.$(OBJEXT) helper_parent.$(OBJEXT) \
 	track_manager.$(OBJEXT) light.$(OBJEXT) story_entity.$(OBJEXT) \
 	campaign.$(OBJEXT) world.$(OBJEXT) world_entity.$(OBJEXT) \
 	player.$(OBJEXT) environment.$(OBJEXT) skysphere.$(OBJEXT) \
-	ai.$(OBJEXT) array.$(OBJEXT) objModel.$(OBJEXT) \
-	model.$(OBJEXT) material.$(OBJEXT) texture.$(OBJEXT) \
-	data_tank.$(OBJEXT) base_entity.$(OBJEXT) \
-	base_object.$(OBJEXT) ini_parser.$(OBJEXT) list.$(OBJEXT) \
-	vector.$(OBJEXT) matrix.$(OBJEXT) curve.$(OBJEXT) \
-	glmenu_imagescreen.$(OBJEXT) fontset.$(OBJEXT)
+	ai.$(OBJEXT) p_node.$(OBJEXT) null_parent.$(OBJEXT) \
+	helper_parent.$(OBJEXT) data_tank.$(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) \
+	fontset.$(OBJEXT)
 orxonox_OBJECTS = $(am_orxonox_OBJECTS)
 orxonox_LDADD = $(LDADD)
@@ -106,5 +106,5 @@
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = . importer gui console
+DIST_SUBDIRS = . gui console
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
@@ -215,5 +215,5 @@
 target_vendor = @target_vendor@
 MAINSRCDIR = .
-AM_CXXFLAGS = -I$(MAINSRCDIR) -I$(MAINSRCDIR)/world_entities -I$(MAINSRCDIR)/story_entities -I$(MAINSRCDIR)/lib -I$(MAINSRCDIR)/lib/data -I$(MAINSRCDIR)/lib/gaphics -I$(MAINSRCDIR)/lib/graphics/importer -I$(MAINSRCDIR)/lib/lang -I$(MAINSRCDIR)/lib/util -I$(MAINSRCDIR)/lib/math -I$(MAINSRCDIR)/defs -I$(MAINSRCDIR)/font -I$(MAINSRCDIR)/network -I$(MAINSRCDIR)/glmenu -I$(MAINSRCDIR)/ai
+AM_CXXFLAGS = -I$(MAINSRCDIR) -I$(MAINSRCDIR)/world_entities -I$(MAINSRCDIR)/story_entities -I$(MAINSRCDIR)/lib -I$(MAINSRCDIR)/lib/coord -I$(MAINSRCDIR)/lib/data -I$(MAINSRCDIR)/lib/gaphics -I$(MAINSRCDIR)/lib/graphics/importer -I$(MAINSRCDIR)/lib/lang -I$(MAINSRCDIR)/lib/util -I$(MAINSRCDIR)/lib/math -I$(MAINSRCDIR)/defs -I$(MAINSRCDIR)/font -I$(MAINSRCDIR)/network -I$(MAINSRCDIR)/glmenu -I$(MAINSRCDIR)/ai
 AM_LDFLAGS = $(MWINDOWS)
 orxonox_SOURCES = orxonox.cc \
@@ -222,7 +222,4 @@
 		 keynames.cc \
 		 camera.cc \
-		 p_node.cc \
-		 null_parent.cc \
-		 helper_parent.cc \
 		 track_manager.cc \
 		 light.cc \
@@ -235,4 +232,8 @@
 		 world_entities/skysphere.cc \
 		 ai/ai.cc \
+		 lib/coord/p_node.cc \
+		 lib/coord/null_parent.cc \
+		 lib/coord/helper_parent.cc \
+		 lib/data/data_tank.cc \
 		 lib/graphics/importer/array.cc \
 		 lib/graphics/importer/objModel.cc \
@@ -240,5 +241,4 @@
 		 lib/graphics/importer/material.cc \
 		 lib/graphics/importer/texture.cc \
-		 lib/data/data_tank.cc \
 		 lib/lang/base_entity.cc \
 		 lib/lang/base_object.cc \
@@ -254,7 +254,4 @@
 		 game_loader.h \
 		 track_manager.h \
-		 p_node.h \
-		 null_parent.h \
-		 helper_parent.h \
 		 glincl.h \
                  ability.h \
@@ -282,4 +279,7 @@
 		 defs/error.h \
 		 defs/debug.h \
+		 lib/coord/p_node.h \
+		 lib/coord/null_parent.h \
+		 lib/coord/helper_parent.h \
 		 lib/data/data_tank.h \
 		 lib/lang/base_entity.h \
@@ -300,6 +300,5 @@
 @HAVE_GTK2_TRUE@GTK_PROGS = console
 @SUB_PROJECTS_FALSE@SUB_PROGS = 
-@SUB_PROJECTS_TRUE@SUB_PROGS = importer \
-@SUB_PROJECTS_TRUE@	      gui \
+@SUB_PROJECTS_TRUE@SUB_PROGS = gui \
 @SUB_PROJECTS_TRUE@	      $(GTK_PROGS)
 
@@ -551,4 +550,68 @@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ai.obj `if test -f 'ai/ai.cc'; then $(CYGPATH_W) 'ai/ai.cc'; else $(CYGPATH_W) '$(srcdir)/ai/ai.cc'; fi`
 
+p_node.o: lib/coord/p_node.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT p_node.o -MD -MP -MF "$(DEPDIR)/p_node.Tpo" -c -o p_node.o `test -f 'lib/coord/p_node.cc' || echo '$(srcdir)/'`lib/coord/p_node.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/p_node.Tpo" "$(DEPDIR)/p_node.Po"; else rm -f "$(DEPDIR)/p_node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/coord/p_node.cc' object='p_node.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/p_node.Po' tmpdepfile='$(DEPDIR)/p_node.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 p_node.o `test -f 'lib/coord/p_node.cc' || echo '$(srcdir)/'`lib/coord/p_node.cc
+
+p_node.obj: lib/coord/p_node.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT p_node.obj -MD -MP -MF "$(DEPDIR)/p_node.Tpo" -c -o p_node.obj `if test -f 'lib/coord/p_node.cc'; then $(CYGPATH_W) 'lib/coord/p_node.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/p_node.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/p_node.Tpo" "$(DEPDIR)/p_node.Po"; else rm -f "$(DEPDIR)/p_node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/coord/p_node.cc' object='p_node.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/p_node.Po' tmpdepfile='$(DEPDIR)/p_node.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 p_node.obj `if test -f 'lib/coord/p_node.cc'; then $(CYGPATH_W) 'lib/coord/p_node.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/p_node.cc'; fi`
+
+null_parent.o: lib/coord/null_parent.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT null_parent.o -MD -MP -MF "$(DEPDIR)/null_parent.Tpo" -c -o null_parent.o `test -f 'lib/coord/null_parent.cc' || echo '$(srcdir)/'`lib/coord/null_parent.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/null_parent.Tpo" "$(DEPDIR)/null_parent.Po"; else rm -f "$(DEPDIR)/null_parent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/coord/null_parent.cc' object='null_parent.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/null_parent.Po' tmpdepfile='$(DEPDIR)/null_parent.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 null_parent.o `test -f 'lib/coord/null_parent.cc' || echo '$(srcdir)/'`lib/coord/null_parent.cc
+
+null_parent.obj: lib/coord/null_parent.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT null_parent.obj -MD -MP -MF "$(DEPDIR)/null_parent.Tpo" -c -o null_parent.obj `if test -f 'lib/coord/null_parent.cc'; then $(CYGPATH_W) 'lib/coord/null_parent.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/null_parent.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/null_parent.Tpo" "$(DEPDIR)/null_parent.Po"; else rm -f "$(DEPDIR)/null_parent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/coord/null_parent.cc' object='null_parent.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/null_parent.Po' tmpdepfile='$(DEPDIR)/null_parent.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 null_parent.obj `if test -f 'lib/coord/null_parent.cc'; then $(CYGPATH_W) 'lib/coord/null_parent.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/null_parent.cc'; fi`
+
+helper_parent.o: lib/coord/helper_parent.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT helper_parent.o -MD -MP -MF "$(DEPDIR)/helper_parent.Tpo" -c -o helper_parent.o `test -f 'lib/coord/helper_parent.cc' || echo '$(srcdir)/'`lib/coord/helper_parent.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/helper_parent.Tpo" "$(DEPDIR)/helper_parent.Po"; else rm -f "$(DEPDIR)/helper_parent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/coord/helper_parent.cc' object='helper_parent.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/helper_parent.Po' tmpdepfile='$(DEPDIR)/helper_parent.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 helper_parent.o `test -f 'lib/coord/helper_parent.cc' || echo '$(srcdir)/'`lib/coord/helper_parent.cc
+
+helper_parent.obj: lib/coord/helper_parent.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT helper_parent.obj -MD -MP -MF "$(DEPDIR)/helper_parent.Tpo" -c -o helper_parent.obj `if test -f 'lib/coord/helper_parent.cc'; then $(CYGPATH_W) 'lib/coord/helper_parent.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/helper_parent.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/helper_parent.Tpo" "$(DEPDIR)/helper_parent.Po"; else rm -f "$(DEPDIR)/helper_parent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/coord/helper_parent.cc' object='helper_parent.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/helper_parent.Po' tmpdepfile='$(DEPDIR)/helper_parent.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 helper_parent.obj `if test -f 'lib/coord/helper_parent.cc'; then $(CYGPATH_W) 'lib/coord/helper_parent.cc'; else $(CYGPATH_W) '$(srcdir)/lib/coord/helper_parent.cc'; fi`
+
+data_tank.o: lib/data/data_tank.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT data_tank.o -MD -MP -MF "$(DEPDIR)/data_tank.Tpo" -c -o data_tank.o `test -f 'lib/data/data_tank.cc' || echo '$(srcdir)/'`lib/data/data_tank.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/data_tank.Tpo" "$(DEPDIR)/data_tank.Po"; else rm -f "$(DEPDIR)/data_tank.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/data/data_tank.cc' object='data_tank.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/data_tank.Po' tmpdepfile='$(DEPDIR)/data_tank.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 data_tank.o `test -f 'lib/data/data_tank.cc' || echo '$(srcdir)/'`lib/data/data_tank.cc
+
+data_tank.obj: lib/data/data_tank.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT data_tank.obj -MD -MP -MF "$(DEPDIR)/data_tank.Tpo" -c -o data_tank.obj `if test -f 'lib/data/data_tank.cc'; then $(CYGPATH_W) 'lib/data/data_tank.cc'; else $(CYGPATH_W) '$(srcdir)/lib/data/data_tank.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/data_tank.Tpo" "$(DEPDIR)/data_tank.Po"; else rm -f "$(DEPDIR)/data_tank.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/data/data_tank.cc' object='data_tank.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/data_tank.Po' tmpdepfile='$(DEPDIR)/data_tank.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 data_tank.obj `if test -f 'lib/data/data_tank.cc'; then $(CYGPATH_W) 'lib/data/data_tank.cc'; else $(CYGPATH_W) '$(srcdir)/lib/data/data_tank.cc'; fi`
+
 array.o: lib/graphics/importer/array.cc
 @am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT array.o -MD -MP -MF "$(DEPDIR)/array.Tpo" -c -o array.o `test -f 'lib/graphics/importer/array.cc' || echo '$(srcdir)/'`lib/graphics/importer/array.cc; \
@@ -630,20 +693,4 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o texture.obj `if test -f 'lib/graphics/importer/texture.cc'; then $(CYGPATH_W) 'lib/graphics/importer/texture.cc'; else $(CYGPATH_W) '$(srcdir)/lib/graphics/importer/texture.cc'; fi`
-
-data_tank.o: lib/data/data_tank.cc
-@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT data_tank.o -MD -MP -MF "$(DEPDIR)/data_tank.Tpo" -c -o data_tank.o `test -f 'lib/data/data_tank.cc' || echo '$(srcdir)/'`lib/data/data_tank.cc; \
-@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/data_tank.Tpo" "$(DEPDIR)/data_tank.Po"; else rm -f "$(DEPDIR)/data_tank.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/data/data_tank.cc' object='data_tank.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/data_tank.Po' tmpdepfile='$(DEPDIR)/data_tank.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 data_tank.o `test -f 'lib/data/data_tank.cc' || echo '$(srcdir)/'`lib/data/data_tank.cc
-
-data_tank.obj: lib/data/data_tank.cc
-@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT data_tank.obj -MD -MP -MF "$(DEPDIR)/data_tank.Tpo" -c -o data_tank.obj `if test -f 'lib/data/data_tank.cc'; then $(CYGPATH_W) 'lib/data/data_tank.cc'; else $(CYGPATH_W) '$(srcdir)/lib/data/data_tank.cc'; fi`; \
-@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/data_tank.Tpo" "$(DEPDIR)/data_tank.Po"; else rm -f "$(DEPDIR)/data_tank.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/data/data_tank.cc' object='data_tank.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/data_tank.Po' tmpdepfile='$(DEPDIR)/data_tank.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 data_tank.obj `if test -f 'lib/data/data_tank.cc'; then $(CYGPATH_W) 'lib/data/data_tank.cc'; else $(CYGPATH_W) '$(srcdir)/lib/data/data_tank.cc'; fi`
 
 base_entity.o: lib/lang/base_entity.cc
@@ -913,5 +960,5 @@
 
 distdir: $(DISTFILES)
-	$(mkdir_p) $(distdir)/ai $(distdir)/defs $(distdir)/font $(distdir)/glmenu $(distdir)/lib/data $(distdir)/lib/lang $(distdir)/lib/math $(distdir)/lib/util $(distdir)/network $(distdir)/story_entities $(distdir)/world_entities
+	$(mkdir_p) $(distdir)/ai $(distdir)/defs $(distdir)/font $(distdir)/glmenu $(distdir)/lib/coord $(distdir)/lib/data $(distdir)/lib/lang $(distdir)/lib/math $(distdir)/lib/util $(distdir)/network $(distdir)/story_entities $(distdir)/world_entities
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
Index: xonox/trunk/src/helper_parent.cc
===================================================================
--- /orxonox/trunk/src/helper_parent.cc	(revision 3487)
+++ 	(revision )
@@ -1,42 +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 "helper_parent.h"
-
-
-using namespace std;
-
-
-/**
-   \brief standard constructor
-
-   \todo this constructor is not jet implemented - do it
-*/
-HelperParent::HelperParent () 
-{
-   this->setClassName ("HelperParent");
-}
-
-
-/**
-   \brief standard deconstructor
-
-   \todo this deconstructor is not jet implemented - do it
-*/
-HelperParent::~HelperParent () {}
-
Index: xonox/trunk/src/helper_parent.h
===================================================================
--- /orxonox/trunk/src/helper_parent.h	(revision 3487)
+++ 	(revision )
@@ -1,24 +1,0 @@
-/*! 
-    \file helper_parent.h
-    \brief this is a parent class, that isn't visible in the real world itself
-*/
-
-
-#ifndef _HELPER_PARENT_H
-#define _HELPER_PARENT_H
-
-#include "stdincl.h"
-#include "p_node.h"
-
-
-
-class HelperParent : public PNode {
-
- public:
-  HelperParent ();
-  ~HelperParent ();
-
-
-};
-
-#endif /* _HELPER_PARENT_H */
Index: /orxonox/trunk/src/lib/coord/helper_parent.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/helper_parent.cc	(revision 3488)
+++ /orxonox/trunk/src/lib/coord/helper_parent.cc	(revision 3488)
@@ -0,0 +1,42 @@
+
+
+/* 
+   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 "helper_parent.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+HelperParent::HelperParent () 
+{
+   this->setClassName ("HelperParent");
+}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+HelperParent::~HelperParent () {}
+
Index: /orxonox/trunk/src/lib/coord/helper_parent.h
===================================================================
--- /orxonox/trunk/src/lib/coord/helper_parent.h	(revision 3488)
+++ /orxonox/trunk/src/lib/coord/helper_parent.h	(revision 3488)
@@ -0,0 +1,24 @@
+/*! 
+    \file helper_parent.h
+    \brief this is a parent class, that isn't visible in the real world itself
+*/
+
+
+#ifndef _HELPER_PARENT_H
+#define _HELPER_PARENT_H
+
+#include "stdincl.h"
+#include "p_node.h"
+
+
+
+class HelperParent : public PNode {
+
+ public:
+  HelperParent ();
+  ~HelperParent ();
+
+
+};
+
+#endif /* _HELPER_PARENT_H */
Index: /orxonox/trunk/src/lib/coord/null_parent.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/null_parent.cc	(revision 3488)
+++ /orxonox/trunk/src/lib/coord/null_parent.cc	(revision 3488)
@@ -0,0 +1,96 @@
+
+
+/* 
+   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 "null_parent.h"
+
+
+using namespace std;
+
+NullParent* NullParent::singletonRef = 0;
+
+NullParent* NullParent::getInstance ()
+{
+  if( singletonRef == NULL)
+    singletonRef = new NullParent ();
+  return singletonRef;
+}
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+NullParent::NullParent () 
+{
+  this->parent = this;
+  this->mode = ALL;
+}
+
+
+NullParent::NullParent (Vector* absCoordinate)
+{
+  this->parent = this;
+  this->mode = ALL;
+  this->absCoordinate = *absCoordinate;
+}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+NullParent::~NullParent () 
+{
+  delete singletonRef;
+  singletonRef = NULL;
+}
+
+
+
+
+/**
+   \brief updates the absCoordinate/absDirection
+
+   this is used to go through the parent-tree to update all the absolute coordinates
+   and directions. this update should be done by the engine, so you don't have to 
+   worry, normaly...
+*/
+void NullParent::update (float timeStamp)
+{
+  this->absCoordinate = this->relCoordinate;
+  this->absDirection = parent->getAbsDir () * this->relDirection;
+  
+  PNode* pn = this->children->enumerate ();
+  while( pn != NULL) 
+    { 
+      /* if this node has changed, make sure, that all children are updated also */
+      if( this->bRelCoorChanged || this->bAbsCoorChanged)
+	pn->parentCoorChanged ();
+      if( this->bRelDirChanged || this->bAbsDirChanged)
+	pn->parentDirChanged ();
+      pn->update (timeStamp);
+      pn = this->children->nextElement ();
+    }
+
+  this->timeStamp = timeStamp;
+  this->bRelCoorChanged = false;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = false;
+  this->bAbsDirChanged = false;
+}
Index: /orxonox/trunk/src/lib/coord/null_parent.h
===================================================================
--- /orxonox/trunk/src/lib/coord/null_parent.h	(revision 3488)
+++ /orxonox/trunk/src/lib/coord/null_parent.h	(revision 3488)
@@ -0,0 +1,30 @@
+/*! 
+    \file proto_class.h
+    \brief Definition of the proto class template, used quickly start work
+*/
+
+
+#ifndef _NULL_PARENT_H
+#define _NULL_PARENT_H
+
+#include "stdincl.h"
+#include "p_node.h"
+
+
+class NullParent : public PNode {
+
+ public:
+  static NullParent* getInstance ();
+  ~NullParent ();
+  
+  static NullParent* singletonRef;
+
+  virtual void update (float timeStamp);
+
+ private:
+  NullParent ();
+  NullParent (Vector* absCoordinate);
+
+};
+
+#endif /* _NULL_PARENT_H */
Index: /orxonox/trunk/src/lib/coord/p_node.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.cc	(revision 3488)
+++ /orxonox/trunk/src/lib/coord/p_node.cc	(revision 3488)
@@ -0,0 +1,458 @@
+
+
+/* 
+   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: ...
+
+   \todo Null-Parent => center of the coord system - singleton
+   \todo Smooth-Parent: delay, speed
+   \todo destroy the stuff again, delete...
+*/
+
+
+#include "p_node.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+PNode::PNode () 
+{
+  this->children = new tList<PNode>();
+  this->bRelCoorChanged = true;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = true;
+  this->bAbsDirChanged = false;
+  this->parent = NULL;
+}
+
+
+/**
+   \brief constructor with coodinates
+   \param absCoordinate the Absolute coordinate of the Object
+   \param parent The parent-node of this node.
+*/
+PNode::PNode (Vector* absCoordinate, PNode* parent )
+{
+  this->absCoordinate = *absCoordinate;
+  this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
+  
+  this->children = new tList<PNode>();
+  this->bRelCoorChanged = true;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = true;
+  this->bAbsDirChanged = false;
+  this->parent = parent;
+
+  parent->addChild (this);
+}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+PNode::~PNode () 
+{
+  /*
+  delete &this->children;
+  delete &this->relCoordinate;
+  delete &this->absCoordinate;
+  delete &this->relDirection;
+  delete &this->absDirection;
+  */
+  this->parent = NULL;
+  /* there is currently a problem with cleaning up - fix*/
+}
+
+
+/**
+   \brief deletes the hole pnode tree
+
+   cleans up all pnodes
+*/
+void PNode::destroy ()
+{
+  PNode* pn = this->children->enumerate();
+  while( pn != NULL) 
+    { 
+      pn->destroy ();
+      pn = this->children->nextElement();
+    } 
+  this->children->destroy ();
+}
+
+
+/**
+   \brief get relative coordinates
+   \returns relative coordinates to its parent
+*/
+Vector PNode::getRelCoor ()
+{
+  Vector r = this->relCoordinate; /* return a copy, so it can't be modified */
+  return r;
+}
+
+
+/**
+   \brief set relative coordinates
+   \param relCoord relative coordinates to its parent
+
+   it is very importand, that you use this function, if you want to update the
+   relCoordinates. If you don't use this, the PNode won't recognize, that something
+   has changed and won't update the children Nodes.
+*/
+void PNode::setRelCoor (Vector* relCoord)
+{
+  this->bRelCoorChanged = true;
+  this->relCoordinate = *relCoord;
+}
+
+
+/**
+   \brief get absolute coordinates
+   \returns absolute coordinates from (0,0,0)
+*/
+Vector PNode::getAbsCoor ()
+{
+  return this->absCoordinate;
+}
+
+
+/**
+   \param absCoord set absolute coordinate
+
+   it is very importand, that you use this function, if you want to update the
+   absCoordinates. If you don't use this, the PNode won't recognize, that something
+   has changed and won't update the children Nodes.
+*/
+void PNode::setAbsCoor (Vector* absCoord)
+{
+  this->bAbsCoorChanged = true;
+  this->absCoordinate = *absCoord;
+}
+
+
+/**
+   \brief shift coordinate (abs and rel)
+   \param shift vector
+
+   this function shifts the current coordinates about the vector shift. this is
+   usefull because from some place else you can:
+   PNode* someNode = ...;
+   Vector objectMovement = calculateShift();
+   someNode->shiftCoor(objectMovement);
+
+   elsewhere you would have to:
+   PNode* someNode = ...;
+   Vector objectMovement = calculateShift();
+   Vector currentCoor = someNode->getRelCoor();
+   Vector newCoor = currentCoor + objectMovement;
+   someNode->setRelCoor(newCoor);
+   
+   yea right... shorter...
+
+*/
+void PNode::shiftCoor (Vector* shift)
+{
+  if( this->bAbsCoorChanged)
+    {
+      this->absCoordinate = this->absCoordinate + *shift;
+    }
+  else 
+    {
+      this->relCoordinate = this->relCoordinate + *shift;
+      this->bRelCoorChanged = true;
+    }
+}
+
+
+
+/**
+   \brief get relative direction
+   \returns relative direction to its parent
+*/
+Quaternion PNode::getRelDir ()
+{
+  return this->relDirection;
+}
+
+
+/**
+   \brief set relative direction
+   \param relDir to its parent
+
+   it is very importand, that you use this function, if you want to update the
+   relDirection. If you don't use this, the PNode won't recognize, that something
+   has changed and won't update the children Nodes.
+*/
+void PNode::setRelDir (Quaternion* relDir)
+{
+  this->bRelCoorChanged = true;
+  this->relDirection = *relDir;
+}
+
+
+/**
+   \brief gets the absolute direction (0,0,1)
+   \returns absolute coordinates
+*/
+Quaternion PNode::getAbsDir ()
+{
+  return this->absDirection;
+}
+
+
+/**
+   \brief sets the absolute direction (0,0,1)
+   \param absDir absolute coordinates
+
+   it is very importand, that you use this function, if you want to update the
+   absDirection. If you don't use this, the PNode won't recognize, that something
+   has changed and won't update the children Nodes.
+*/
+void PNode::setAbsDir (Quaternion* absDir)
+{
+  this->bAbsDirChanged = true;
+  this->absDirection = *absDir;
+}
+
+
+/**
+   \brief shift coordinate (abs and rel)
+   \param shift vector
+
+   this function shifts the current coordinates about the vector shift. this is
+   usefull because from some place else you can:
+   PNode* someNode = ...;
+   Quaternion objectMovement = calculateShift();
+   someNode->shiftCoor(objectMovement);
+
+   elsewhere you would have to:
+   PNode* someNode = ...;
+   Quaternion objectMovement = calculateShift();
+   Quaternion currentCoor = someNode->getRelCoor();
+   Quaternion newCoor = currentCoor + objectMovement;
+   someNode->setRelCoor(newCoor);
+   
+   yea right... shorter...
+
+   \todo implement this
+*/
+void PNode::shiftDir (Quaternion* shift)
+{}
+
+
+
+/**
+   \brief adds a child and makes this node to a parent
+   \param pNode child reference
+
+   use this to add a child to this node.
+*/
+void PNode::addChild (PNode* pNode)
+{
+  this->addChild(pNode, DEFAULT_MODE);
+}
+
+
+/**
+   \brief adds a child and makes this node to a parent
+   \param pNode child reference
+   \param mode on which changes the child should also change ist state
+
+   use this to add a child to this node.
+*/
+void PNode::addChild (PNode* pNode, parentingMode mode)
+{
+  pNode->mode = mode;
+  pNode->parent = this;
+  this->children->add (pNode);
+}
+
+
+/**
+   \brief removes a child from the node
+   \param pNode the child to remove from this pNode.
+*/
+void PNode::removeChild (PNode* pNode)
+{
+  this->children->remove (pNode);
+}
+
+
+/**
+   \brief sets the parent of this PNode
+   \param parent the Parent to set
+*/
+void PNode::setParent (PNode* parent)
+{
+  this->parent = parent;
+}
+
+/**
+   \brief set the mode of this parent manualy
+   \param mode the mode of the bind-type.
+*/
+void PNode::setMode (parentingMode mode)
+{
+  this->mode = mode;
+}
+
+/**
+   \brief has to be called, if the parent coordinate has changed
+   
+   normaly this will be done by the parent itself automaticaly. If you call this, you
+   will force an update of the coordinated of the node.
+*/
+void PNode::parentCoorChanged ()
+{
+  this->bRelCoorChanged = true;
+}
+
+
+/**
+   \brief has to be called, if the parent direction has changed
+   
+   normaly this will be done by the parent itself automaticaly. If you call this, you
+   will force an update of the direction of the node.
+*/
+void PNode::parentDirChanged ()
+{
+  this->bRelDirChanged = true;
+}
+
+
+/**
+   \brief updates the absCoordinate/absDirection
+   \param timeStamp The timestanp used for to look if calculations should be done
+
+   this is used to go through the parent-tree to update all the absolute coordinates
+   and directions. this update should be done by the engine, so you don't have to 
+   worry, normaly...
+*/
+void PNode::update (float timeStamp)
+{
+  printf ("PNode::update - %s - (%f, %f, %f)\n", this->objectName, this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+
+      if( this->mode == MOVEMENT || this->mode == ALL)
+	{
+	  if( this->bAbsCoorChanged /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      printf("PNode::update () - this->bAbsCoorChanged = true\n");
+	      /* if you have set the absolute coordinates this overrides all other changes */
+	      this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
+	    }
+	  else if( this->bRelCoorChanged /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /*this is bad style... must be deleted later - just for testing*/
+	      if( this->parent == NULL)
+		{
+		this->absCoordinate = this->relCoordinate;
+		}
+	      else
+		this->absCoordinate = parent->getAbsCoor () + this->relCoordinate;	      /* update the current absCoordinate */
+	    }
+	}
+      
+      if( this->mode == ROTATION && this->mode == ALL)
+	{
+	  if( this->bAbsDirChanged /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /* if you have set the absolute coordinates this overrides all other changes */
+	      this->relDirection = this->absDirection - parent->getAbsDir ();
+	    }
+	  else if( this->bRelDirChanged /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /* update the current absDirection - remember * means rotation around sth.*/
+	      this->absDirection = parent->getAbsDir () * this->relDirection;
+	    }
+	}    
+      // }
+  PNode* pn = this->children->enumerate();
+  while( pn != NULL) 
+    { 
+      /* if this node has changed, make sure, that all children are updated also */
+      if( this->bRelCoorChanged || this->bAbsCoorChanged)
+	pn->parentCoorChanged ();
+      if( this->bRelDirChanged || this->bAbsDirChanged)
+	pn->parentDirChanged ();
+      pn->update(timeStamp);
+      pn = this->children->nextElement();
+    }
+
+  this->timeStamp = timeStamp;
+  this->bRelCoorChanged = false;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = false;
+  this->bAbsDirChanged = false;
+}
+
+
+/**
+  \brief tick
+  \param dt time to tick
+*/
+void PNode::processTick (float dt)
+{
+  this->tick (dt);
+  PNode* pn = this->children->enumerate();
+  while( pn != NULL) 
+    { 
+      pn->processTick (dt);
+      pn = this->children->nextElement();
+    } 
+}
+
+/**
+   \param dt time to tick
+*/
+void PNode::tick (float dt)
+{}
+
+/**
+   \brief displays some information about this pNode
+*/
+void PNode::debug()
+{
+  printf("PNode::debug() - absCoord: (%f, %f, %f)\n", 
+	 this->absCoordinate.x, 
+	 this->absCoordinate.y,
+	 this->absCoordinate.z);
+}
+
+
+/**
+  \brief set the name of the node
+
+  for debug purposes realy usefull, not used to work properly
+*/
+void PNode::setName (char* newName)
+{
+  this->objectName = newName;
+}
+
+
+/**
+  \brief gets the name of the node
+*/
+char* PNode::getName ()
+{
+  return this->objectName;
+}
Index: /orxonox/trunk/src/lib/coord/p_node.h
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.h	(revision 3488)
+++ /orxonox/trunk/src/lib/coord/p_node.h	(revision 3488)
@@ -0,0 +1,95 @@
+/*! 
+    \file p_node.h
+    \brief Definition of a parenting node
+
+    parenting is how coordinates are handled in orxonox, meaning, that all coordinates
+    are representet relative to another parent node. this nodes build a parenting
+    tree of one-sided references (from up to down referenced).
+    Every node manages itself a list of childrens (of whos it is parent - easy...)
+
+    absCoordinate, absDirection have to be recalculated as soon as there was a change in
+    place or ortientation. this is only the case if 
+    o bDirChanged is true (so changed) AND timeStamp != now
+    o bCoorChanged is true (so moved) AND timeStamp != now
+    this conditions make it cheaper to recalculate the tree (reduces redundant work).
+
+    remember: if you have to change the coordinates or the directions, use the functions
+    that are defined to execute this operation - otherwhise there will be big problems...
+*/
+
+
+#ifndef _P_NODE_H
+#define _P_NODE_H
+
+#include "stdincl.h"
+
+class PNode; /* forward decleration, so that parentEntry has access to PNode */
+
+//! enumeration for the different translation-binding-types
+typedef enum parentingMode {MOVEMENT = 0, ROTATION, ALL};
+//! The default mode of the translation-binding.
+#define DEFAULT_MODE ALL
+
+//! Patent Node is a Engine to calculate the position of an Object in respect to the position of its parent.
+class PNode : public BaseObject {
+
+ public:
+  PNode ();
+  PNode (Vector* absCoordinate, PNode* pNode);
+  virtual ~PNode ();
+
+  void destroy ();
+
+  PNode* parent;            //!< a pointer to the parent node
+  tList<PNode>* children;   //!< list of the children
+
+  parentingMode mode;       //!< the mode of the binding
+
+  Vector getRelCoor ();
+  void setRelCoor (Vector* relCoord);
+  //void setRelCoor (Vector relCoord);
+  Vector getAbsCoor ();
+  void setAbsCoor (Vector* absCoord);
+  //void setAbsCoor (Vector absCoord);
+  void shiftCoor (Vector* shift);
+  //void shiftCoor (Vector shift);
+
+  Quaternion getRelDir ();
+  void setRelDir (Quaternion* relDir);
+  Quaternion getAbsDir ();
+  void setAbsDir (Quaternion* absDir);
+  void shiftDir (Quaternion* shift);
+
+  void addChild (PNode* pNode);
+  void addChild (PNode* pNode, parentingMode mode);
+  void removeChild (PNode* pNode);
+  void setParent (PNode* parent);
+  void parentCoorChanged ();
+  void parentDirChanged ();
+  void setMode (parentingMode mode);
+
+  virtual void update (float timeStamp);
+  void processTick (float dt);
+  virtual void tick (float dt);
+
+  void setName (char* newName);
+  char* getName ();
+
+
+  void debug ();
+
+  float timeStamp;         //!< this the timeStamp of when the abs{Coordinat, Direction} has been calculated
+  char* objectName;        //!< The name of the Object
+  bool bAbsCoorChanged;    //!< If Absolute Coordinate has changed since last time we checked
+  bool bRelCoorChanged;    //!< If Relative Coordinate has changed since last time we checked
+  bool bAbsDirChanged;     //!< If Absolute Direction has changed since last time we checked
+  bool bRelDirChanged;     //!< If Relative Direction has changed since last time we checked
+
+  Vector relCoordinate;    //!< coordinates relative to the parent
+  Vector absCoordinate;    //!< absolute coordinates in the world ( from (0,0,0) )
+  Quaternion relDirection; //!< direction relative to the parent
+  Quaternion absDirection; //!< absolute direvtion in the world ( from (0,0,1) )
+
+};
+
+#endif /* _P_NODE_H */
Index: xonox/trunk/src/null_parent.cc
===================================================================
--- /orxonox/trunk/src/null_parent.cc	(revision 3487)
+++ 	(revision )
@@ -1,96 +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 "null_parent.h"
-
-
-using namespace std;
-
-NullParent* NullParent::singletonRef = 0;
-
-NullParent* NullParent::getInstance ()
-{
-  if( singletonRef == NULL)
-    singletonRef = new NullParent ();
-  return singletonRef;
-}
-
-/**
-   \brief standard constructor
-
-   \todo this constructor is not jet implemented - do it
-*/
-NullParent::NullParent () 
-{
-  this->parent = this;
-  this->mode = ALL;
-}
-
-
-NullParent::NullParent (Vector* absCoordinate)
-{
-  this->parent = this;
-  this->mode = ALL;
-  this->absCoordinate = *absCoordinate;
-}
-
-
-/**
-   \brief standard deconstructor
-
-   \todo this deconstructor is not jet implemented - do it
-*/
-NullParent::~NullParent () 
-{
-  delete singletonRef;
-  singletonRef = NULL;
-}
-
-
-
-
-/**
-   \brief updates the absCoordinate/absDirection
-
-   this is used to go through the parent-tree to update all the absolute coordinates
-   and directions. this update should be done by the engine, so you don't have to 
-   worry, normaly...
-*/
-void NullParent::update (float timeStamp)
-{
-  this->absCoordinate = this->relCoordinate;
-  this->absDirection = parent->getAbsDir () * this->relDirection;
-  
-  PNode* pn = this->children->enumerate ();
-  while( pn != NULL) 
-    { 
-      /* if this node has changed, make sure, that all children are updated also */
-      if( this->bRelCoorChanged || this->bAbsCoorChanged)
-	pn->parentCoorChanged ();
-      if( this->bRelDirChanged || this->bAbsDirChanged)
-	pn->parentDirChanged ();
-      pn->update (timeStamp);
-      pn = this->children->nextElement ();
-    }
-
-  this->timeStamp = timeStamp;
-  this->bRelCoorChanged = false;
-  this->bAbsCoorChanged = false;
-  this->bRelDirChanged = false;
-  this->bAbsDirChanged = false;
-}
Index: xonox/trunk/src/null_parent.h
===================================================================
--- /orxonox/trunk/src/null_parent.h	(revision 3487)
+++ 	(revision )
@@ -1,30 +1,0 @@
-/*! 
-    \file proto_class.h
-    \brief Definition of the proto class template, used quickly start work
-*/
-
-
-#ifndef _NULL_PARENT_H
-#define _NULL_PARENT_H
-
-#include "stdincl.h"
-#include "p_node.h"
-
-
-class NullParent : public PNode {
-
- public:
-  static NullParent* getInstance ();
-  ~NullParent ();
-  
-  static NullParent* singletonRef;
-
-  virtual void update (float timeStamp);
-
- private:
-  NullParent ();
-  NullParent (Vector* absCoordinate);
-
-};
-
-#endif /* _NULL_PARENT_H */
Index: xonox/trunk/src/p_node.cc
===================================================================
--- /orxonox/trunk/src/p_node.cc	(revision 3487)
+++ 	(revision )
@@ -1,458 +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: ...
-
-   \todo Null-Parent => center of the coord system - singleton
-   \todo Smooth-Parent: delay, speed
-   \todo destroy the stuff again, delete...
-*/
-
-
-#include "p_node.h"
-
-
-using namespace std;
-
-
-/**
-   \brief standard constructor
-
-   \todo this constructor is not jet implemented - do it
-*/
-PNode::PNode () 
-{
-  this->children = new tList<PNode>();
-  this->bRelCoorChanged = true;
-  this->bAbsCoorChanged = false;
-  this->bRelDirChanged = true;
-  this->bAbsDirChanged = false;
-  this->parent = NULL;
-}
-
-
-/**
-   \brief constructor with coodinates
-   \param absCoordinate the Absolute coordinate of the Object
-   \param parent The parent-node of this node.
-*/
-PNode::PNode (Vector* absCoordinate, PNode* parent )
-{
-  this->absCoordinate = *absCoordinate;
-  this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
-  
-  this->children = new tList<PNode>();
-  this->bRelCoorChanged = true;
-  this->bAbsCoorChanged = false;
-  this->bRelDirChanged = true;
-  this->bAbsDirChanged = false;
-  this->parent = parent;
-
-  parent->addChild (this);
-}
-
-
-/**
-   \brief standard deconstructor
-
-   \todo this deconstructor is not jet implemented - do it
-*/
-PNode::~PNode () 
-{
-  /*
-  delete &this->children;
-  delete &this->relCoordinate;
-  delete &this->absCoordinate;
-  delete &this->relDirection;
-  delete &this->absDirection;
-  */
-  this->parent = NULL;
-  /* there is currently a problem with cleaning up - fix*/
-}
-
-
-/**
-   \brief deletes the hole pnode tree
-
-   cleans up all pnodes
-*/
-void PNode::destroy ()
-{
-  PNode* pn = this->children->enumerate();
-  while( pn != NULL) 
-    { 
-      pn->destroy ();
-      pn = this->children->nextElement();
-    } 
-  this->children->destroy ();
-}
-
-
-/**
-   \brief get relative coordinates
-   \returns relative coordinates to its parent
-*/
-Vector PNode::getRelCoor ()
-{
-  Vector r = this->relCoordinate; /* return a copy, so it can't be modified */
-  return r;
-}
-
-
-/**
-   \brief set relative coordinates
-   \param relCoord relative coordinates to its parent
-
-   it is very importand, that you use this function, if you want to update the
-   relCoordinates. If you don't use this, the PNode won't recognize, that something
-   has changed and won't update the children Nodes.
-*/
-void PNode::setRelCoor (Vector* relCoord)
-{
-  this->bRelCoorChanged = true;
-  this->relCoordinate = *relCoord;
-}
-
-
-/**
-   \brief get absolute coordinates
-   \returns absolute coordinates from (0,0,0)
-*/
-Vector PNode::getAbsCoor ()
-{
-  return this->absCoordinate;
-}
-
-
-/**
-   \param absCoord set absolute coordinate
-
-   it is very importand, that you use this function, if you want to update the
-   absCoordinates. If you don't use this, the PNode won't recognize, that something
-   has changed and won't update the children Nodes.
-*/
-void PNode::setAbsCoor (Vector* absCoord)
-{
-  this->bAbsCoorChanged = true;
-  this->absCoordinate = *absCoord;
-}
-
-
-/**
-   \brief shift coordinate (abs and rel)
-   \param shift vector
-
-   this function shifts the current coordinates about the vector shift. this is
-   usefull because from some place else you can:
-   PNode* someNode = ...;
-   Vector objectMovement = calculateShift();
-   someNode->shiftCoor(objectMovement);
-
-   elsewhere you would have to:
-   PNode* someNode = ...;
-   Vector objectMovement = calculateShift();
-   Vector currentCoor = someNode->getRelCoor();
-   Vector newCoor = currentCoor + objectMovement;
-   someNode->setRelCoor(newCoor);
-   
-   yea right... shorter...
-
-*/
-void PNode::shiftCoor (Vector* shift)
-{
-  if( this->bAbsCoorChanged)
-    {
-      this->absCoordinate = this->absCoordinate + *shift;
-    }
-  else 
-    {
-      this->relCoordinate = this->relCoordinate + *shift;
-      this->bRelCoorChanged = true;
-    }
-}
-
-
-
-/**
-   \brief get relative direction
-   \returns relative direction to its parent
-*/
-Quaternion PNode::getRelDir ()
-{
-  return this->relDirection;
-}
-
-
-/**
-   \brief set relative direction
-   \param relDir to its parent
-
-   it is very importand, that you use this function, if you want to update the
-   relDirection. If you don't use this, the PNode won't recognize, that something
-   has changed and won't update the children Nodes.
-*/
-void PNode::setRelDir (Quaternion* relDir)
-{
-  this->bRelCoorChanged = true;
-  this->relDirection = *relDir;
-}
-
-
-/**
-   \brief gets the absolute direction (0,0,1)
-   \returns absolute coordinates
-*/
-Quaternion PNode::getAbsDir ()
-{
-  return this->absDirection;
-}
-
-
-/**
-   \brief sets the absolute direction (0,0,1)
-   \param absDir absolute coordinates
-
-   it is very importand, that you use this function, if you want to update the
-   absDirection. If you don't use this, the PNode won't recognize, that something
-   has changed and won't update the children Nodes.
-*/
-void PNode::setAbsDir (Quaternion* absDir)
-{
-  this->bAbsDirChanged = true;
-  this->absDirection = *absDir;
-}
-
-
-/**
-   \brief shift coordinate (abs and rel)
-   \param shift vector
-
-   this function shifts the current coordinates about the vector shift. this is
-   usefull because from some place else you can:
-   PNode* someNode = ...;
-   Quaternion objectMovement = calculateShift();
-   someNode->shiftCoor(objectMovement);
-
-   elsewhere you would have to:
-   PNode* someNode = ...;
-   Quaternion objectMovement = calculateShift();
-   Quaternion currentCoor = someNode->getRelCoor();
-   Quaternion newCoor = currentCoor + objectMovement;
-   someNode->setRelCoor(newCoor);
-   
-   yea right... shorter...
-
-   \todo implement this
-*/
-void PNode::shiftDir (Quaternion* shift)
-{}
-
-
-
-/**
-   \brief adds a child and makes this node to a parent
-   \param pNode child reference
-
-   use this to add a child to this node.
-*/
-void PNode::addChild (PNode* pNode)
-{
-  this->addChild(pNode, DEFAULT_MODE);
-}
-
-
-/**
-   \brief adds a child and makes this node to a parent
-   \param pNode child reference
-   \param mode on which changes the child should also change ist state
-
-   use this to add a child to this node.
-*/
-void PNode::addChild (PNode* pNode, parentingMode mode)
-{
-  pNode->mode = mode;
-  pNode->parent = this;
-  this->children->add (pNode);
-}
-
-
-/**
-   \brief removes a child from the node
-   \param pNode the child to remove from this pNode.
-*/
-void PNode::removeChild (PNode* pNode)
-{
-  this->children->remove (pNode);
-}
-
-
-/**
-   \brief sets the parent of this PNode
-   \param parent the Parent to set
-*/
-void PNode::setParent (PNode* parent)
-{
-  this->parent = parent;
-}
-
-/**
-   \brief set the mode of this parent manualy
-   \param mode the mode of the bind-type.
-*/
-void PNode::setMode (parentingMode mode)
-{
-  this->mode = mode;
-}
-
-/**
-   \brief has to be called, if the parent coordinate has changed
-   
-   normaly this will be done by the parent itself automaticaly. If you call this, you
-   will force an update of the coordinated of the node.
-*/
-void PNode::parentCoorChanged ()
-{
-  this->bRelCoorChanged = true;
-}
-
-
-/**
-   \brief has to be called, if the parent direction has changed
-   
-   normaly this will be done by the parent itself automaticaly. If you call this, you
-   will force an update of the direction of the node.
-*/
-void PNode::parentDirChanged ()
-{
-  this->bRelDirChanged = true;
-}
-
-
-/**
-   \brief updates the absCoordinate/absDirection
-   \param timeStamp The timestanp used for to look if calculations should be done
-
-   this is used to go through the parent-tree to update all the absolute coordinates
-   and directions. this update should be done by the engine, so you don't have to 
-   worry, normaly...
-*/
-void PNode::update (float timeStamp)
-{
-  printf ("PNode::update - %s - (%f, %f, %f)\n", this->objectName, this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
-
-      if( this->mode == MOVEMENT || this->mode == ALL)
-	{
-	  if( this->bAbsCoorChanged /*&& this->timeStamp != DataTank::timeStamp*/)
-	    {
-	      printf("PNode::update () - this->bAbsCoorChanged = true\n");
-	      /* if you have set the absolute coordinates this overrides all other changes */
-	      this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
-	    }
-	  else if( this->bRelCoorChanged /*&& this->timeStamp != DataTank::timeStamp*/)
-	    {
-	      /*this is bad style... must be deleted later - just for testing*/
-	      if( this->parent == NULL)
-		{
-		this->absCoordinate = this->relCoordinate;
-		}
-	      else
-		this->absCoordinate = parent->getAbsCoor () + this->relCoordinate;	      /* update the current absCoordinate */
-	    }
-	}
-      
-      if( this->mode == ROTATION && this->mode == ALL)
-	{
-	  if( this->bAbsDirChanged /*&& this->timeStamp != DataTank::timeStamp*/)
-	    {
-	      /* if you have set the absolute coordinates this overrides all other changes */
-	      this->relDirection = this->absDirection - parent->getAbsDir ();
-	    }
-	  else if( this->bRelDirChanged /*&& this->timeStamp != DataTank::timeStamp*/)
-	    {
-	      /* update the current absDirection - remember * means rotation around sth.*/
-	      this->absDirection = parent->getAbsDir () * this->relDirection;
-	    }
-	}    
-      // }
-  PNode* pn = this->children->enumerate();
-  while( pn != NULL) 
-    { 
-      /* if this node has changed, make sure, that all children are updated also */
-      if( this->bRelCoorChanged || this->bAbsCoorChanged)
-	pn->parentCoorChanged ();
-      if( this->bRelDirChanged || this->bAbsDirChanged)
-	pn->parentDirChanged ();
-      pn->update(timeStamp);
-      pn = this->children->nextElement();
-    }
-
-  this->timeStamp = timeStamp;
-  this->bRelCoorChanged = false;
-  this->bAbsCoorChanged = false;
-  this->bRelDirChanged = false;
-  this->bAbsDirChanged = false;
-}
-
-
-/**
-  \brief tick
-  \param dt time to tick
-*/
-void PNode::processTick (float dt)
-{
-  this->tick (dt);
-  PNode* pn = this->children->enumerate();
-  while( pn != NULL) 
-    { 
-      pn->processTick (dt);
-      pn = this->children->nextElement();
-    } 
-}
-
-/**
-   \param dt time to tick
-*/
-void PNode::tick (float dt)
-{}
-
-/**
-   \brief displays some information about this pNode
-*/
-void PNode::debug()
-{
-  printf("PNode::debug() - absCoord: (%f, %f, %f)\n", 
-	 this->absCoordinate.x, 
-	 this->absCoordinate.y,
-	 this->absCoordinate.z);
-}
-
-
-/**
-  \brief set the name of the node
-
-  for debug purposes realy usefull, not used to work properly
-*/
-void PNode::setName (char* newName)
-{
-  this->objectName = newName;
-}
-
-
-/**
-  \brief gets the name of the node
-*/
-char* PNode::getName ()
-{
-  return this->objectName;
-}
Index: xonox/trunk/src/p_node.h
===================================================================
--- /orxonox/trunk/src/p_node.h	(revision 3487)
+++ 	(revision )
@@ -1,95 +1,0 @@
-/*! 
-    \file p_node.h
-    \brief Definition of a parenting node
-
-    parenting is how coordinates are handled in orxonox, meaning, that all coordinates
-    are representet relative to another parent node. this nodes build a parenting
-    tree of one-sided references (from up to down referenced).
-    Every node manages itself a list of childrens (of whos it is parent - easy...)
-
-    absCoordinate, absDirection have to be recalculated as soon as there was a change in
-    place or ortientation. this is only the case if 
-    o bDirChanged is true (so changed) AND timeStamp != now
-    o bCoorChanged is true (so moved) AND timeStamp != now
-    this conditions make it cheaper to recalculate the tree (reduces redundant work).
-
-    remember: if you have to change the coordinates or the directions, use the functions
-    that are defined to execute this operation - otherwhise there will be big problems...
-*/
-
-
-#ifndef _P_NODE_H
-#define _P_NODE_H
-
-#include "stdincl.h"
-
-class PNode; /* forward decleration, so that parentEntry has access to PNode */
-
-//! enumeration for the different translation-binding-types
-typedef enum parentingMode {MOVEMENT = 0, ROTATION, ALL};
-//! The default mode of the translation-binding.
-#define DEFAULT_MODE ALL
-
-//! Patent Node is a Engine to calculate the position of an Object in respect to the position of its parent.
-class PNode : public BaseObject {
-
- public:
-  PNode ();
-  PNode (Vector* absCoordinate, PNode* pNode);
-  virtual ~PNode ();
-
-  void destroy ();
-
-  PNode* parent;            //!< a pointer to the parent node
-  tList<PNode>* children;   //!< list of the children
-
-  parentingMode mode;       //!< the mode of the binding
-
-  Vector getRelCoor ();
-  void setRelCoor (Vector* relCoord);
-  //void setRelCoor (Vector relCoord);
-  Vector getAbsCoor ();
-  void setAbsCoor (Vector* absCoord);
-  //void setAbsCoor (Vector absCoord);
-  void shiftCoor (Vector* shift);
-  //void shiftCoor (Vector shift);
-
-  Quaternion getRelDir ();
-  void setRelDir (Quaternion* relDir);
-  Quaternion getAbsDir ();
-  void setAbsDir (Quaternion* absDir);
-  void shiftDir (Quaternion* shift);
-
-  void addChild (PNode* pNode);
-  void addChild (PNode* pNode, parentingMode mode);
-  void removeChild (PNode* pNode);
-  void setParent (PNode* parent);
-  void parentCoorChanged ();
-  void parentDirChanged ();
-  void setMode (parentingMode mode);
-
-  virtual void update (float timeStamp);
-  void processTick (float dt);
-  virtual void tick (float dt);
-
-  void setName (char* newName);
-  char* getName ();
-
-
-  void debug ();
-
-  float timeStamp;         //!< this the timeStamp of when the abs{Coordinat, Direction} has been calculated
-  char* objectName;        //!< The name of the Object
-  bool bAbsCoorChanged;    //!< If Absolute Coordinate has changed since last time we checked
-  bool bRelCoorChanged;    //!< If Relative Coordinate has changed since last time we checked
-  bool bAbsDirChanged;     //!< If Absolute Direction has changed since last time we checked
-  bool bRelDirChanged;     //!< If Relative Direction has changed since last time we checked
-
-  Vector relCoordinate;    //!< coordinates relative to the parent
-  Vector absCoordinate;    //!< absolute coordinates in the world ( from (0,0,0) )
-  Quaternion relDirection; //!< direction relative to the parent
-  Quaternion absDirection; //!< absolute direvtion in the world ( from (0,0,1) )
-
-};
-
-#endif /* _P_NODE_H */
