Index: orxonox/trunk/src/Makefile.am
===================================================================
--- orxonox/trunk/src/Makefile.am	(revision 3245)
+++ orxonox/trunk/src/Makefile.am	(revision 3246)
@@ -27,5 +27,6 @@
 		 importer/array.cc \
 		 importer/material.cc \
-		 list.cc
+		 list.cc \
+		 p_node.cc
 
 noinst_HEADERS = ability.h \
@@ -60,5 +61,6 @@
 		 story_def.h \
 		 game_loader.h \
-		 campaign.h
+		 campaign.h \
+		 p_node.h
 
 ## orxonox.conf will be used from home-dir instead.
Index: orxonox/trunk/src/Makefile.in
===================================================================
--- orxonox/trunk/src/Makefile.in	(revision 3245)
+++ orxonox/trunk/src/Makefile.in	(revision 3246)
@@ -60,5 +60,5 @@
 	campaign.$(OBJEXT) story_entity.$(OBJEXT) \
 	environment.$(OBJEXT) object.$(OBJEXT) array.$(OBJEXT) \
-	material.$(OBJEXT) list.$(OBJEXT)
+	material.$(OBJEXT) list.$(OBJEXT) p_node.$(OBJEXT)
 orxonox_OBJECTS = $(am_orxonox_OBJECTS)
 orxonox_LDADD = $(LDADD)
@@ -76,7 +76,8 @@
 @AMDEP_TRUE@	./$(DEPDIR)/list.Po ./$(DEPDIR)/material.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/object.Po ./$(DEPDIR)/orxonox.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/player.Po ./$(DEPDIR)/story_entity.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/track.Po ./$(DEPDIR)/vector.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/world.Po ./$(DEPDIR)/world_entity.Po
+@AMDEP_TRUE@	./$(DEPDIR)/p_node.Po ./$(DEPDIR)/player.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/story_entity.Po ./$(DEPDIR)/track.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/vector.Po ./$(DEPDIR)/world.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/world_entity.Po
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -216,5 +217,6 @@
 		 importer/array.cc \
 		 importer/material.cc \
-		 list.cc
+		 list.cc \
+		 p_node.cc
 
 noinst_HEADERS = ability.h \
@@ -249,5 +251,6 @@
 		 story_def.h \
 		 game_loader.h \
-		 campaign.h
+		 campaign.h \
+		 p_node.h
 
 EXTRA_DIST = orxonox.conf
@@ -342,4 +345,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_node.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/story_entity.Po@am__quote@
Index: orxonox/trunk/src/p_node.cc
===================================================================
--- orxonox/trunk/src/p_node.cc	(revision 3246)
+++ orxonox/trunk/src/p_node.cc	(revision 3246)
@@ -0,0 +1,39 @@
+
+
+/* 
+   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 "p_node.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+PNode::PNode () {}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+PNode::~PNode () {}
+
Index: orxonox/trunk/src/p_node.h
===================================================================
--- orxonox/trunk/src/p_node.h	(revision 3246)
+++ orxonox/trunk/src/p_node.h	(revision 3246)
@@ -0,0 +1,60 @@
+/*! 
+    \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, because the object (point) did move,
+    don't forget to reset both relCoor and absCoor (offset is the same)
+*/
+
+
+#ifndef _P_NODE_H
+#define _P_NODE_H
+
+#include "stdincl.h"
+
+
+class PNode {
+
+ public:
+  PNode ();
+  ~PNode ();
+
+  Vector getRelCoor ();
+  void setRelCoor (Vector relCoord);
+  Vector getAbsCoor ();
+  void setAbsCoor (Vector absCoord);
+
+  Quaternion getRelDir ();
+  void setRelDir (Quaternion relDir);
+  Quaternion getAbsDir ();
+  void setAbsCoor (Quaternion absDir);
+
+  void addChild (PNode* pNode);
+  void removeChild (PNode* pNode);
+
+ private:
+  long timeStamp; //! this the timeStamp of when the abs{Coordinat, Direction} has been calculated
+  bool bCoorChanged;
+  bool bDirChanged;
+
+  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) )
+
+  tList<PNode>* children; //! list of the children
+
+};
+
+#endif /* _P_NODE_H */
Index: orxonox/trunk/src/proto_class.h
===================================================================
--- orxonox/trunk/src/proto_class.h	(revision 3245)
+++ orxonox/trunk/src/proto_class.h	(revision 3246)
@@ -1,5 +1,5 @@
 /*! 
-    \file world_entity.h
-    \brief Definition of the basic WorldEntity
+    \file proto_class.h
+    \brief Definition of the proto class template, used quickly start work
 */
 
