Index: orxonox/trunk/src/defs/class_id.h
===================================================================
--- orxonox/trunk/src/defs/class_id.h	(revision 4742)
+++ orxonox/trunk/src/defs/class_id.h	(revision 4742)
@@ -0,0 +1,180 @@
+/*
+   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
+
+   2005-06-10: (bensch) added new sturcture to support multiple inheritance
+*/
+
+/*!
+    \file class_id.h
+    \brief list of orxonox classID's
+
+    this File is used to identify an Object with its class and also with its sub/super-classes.
+    this is also used by the ObjectManager to identify and load important classes
+
+    !! important !!
+    When adding a new CLASS be sure about the following:
+      1. if it is a (SUB)SUPERCLASS make sure there is still space left (if not think of a new approach)
+      2. if it is a (SUB)SUPERCLASS also add the CLASS to BaseObject::whatIs() so we have nice output :)
+      3. check if the Number you add is not refered to twice, and that with (SUB)SUPERCLASSES there are no intersections
+      4. be sure to add you stuff in the right section, and don't interest yourself for the order of things. :)
+*/
+
+#ifndef _CLASS_ID_H
+#define _CLASS_ID_H
+
+//! list of all classes to be loadable in via the ObjectManager
+/**
+ * inheritance is done in the following way: Classes are identified by
+ * a HEX-number eg: 0x12345678
+ * The number has 8^4 entries.
+ * The first two: 1,2 superclass identifiers to
+ * The second three are for subclasses with inheritance
+ * These two may not be the same in any way,
+ * eg. the bits may not intersect (no 1, 2 and a 3; 1,2 and 4 would be ok)
+ * The last three entries are for any classes in existence eg. SkyBox and so on
+ *
+ * \todo complete this List
+*/
+typedef enum ClassID
+{
+  // superclasses
+  CL_MASK_SUPER_CLASS     =    0xff000000,
+  CL_BASE_OBJECT          =    0x01000000,
+
+  CL_PARENT_NODE          =    0x02000000,
+  CL_WORLD_ENTITY         =    0x04000000,
+
+  CL_STORY_ENTITY         =    0x08000000,
+
+  CL_PHYSICS_INTERFACE    =    0x10000000,
+
+  CL_EVENT_LISTENER       =    0x20000000,
+
+  // subsuper-classes
+  CL_MASK_SUBSUPER_CLASS  =    0x00fff000,
+  CL_PLAYER               =    0x00001000,
+  CL_NPC                  =    0x00002000,
+  CL_POWER_UP             =    0x00004000,
+  CL_FIELD                =    0x00008000,
+  CL_PROJECTILE           =    0x00010000,
+  CL_WEAPON               =    0x00020000,
+
+  // lowest level classes
+  CL_MASK_LOWLEVEL_CLASS  =    0x00000fff,
+
+  // singleton classes (range from 0x00000f01 to 0x00000fff)
+  CL_MASK_SINGLETON       =    0x00000f00,
+  CL_ORXONOX              =    0x00000f01,
+  CL_NULL_PARENT          =    0x00000f02,
+  CL_PILOT_PARENT         =    0x00000f03,
+  CL_OBJECT_MANAGER       =    0x00000f04,
+  CL_RESOURCE_MANAGER     =    0x00000f05,
+  CL_GARBAGE_COLLECTOR    =    0x00000f06,
+  CL_GAME_LOADER          =    0x00000f07,
+  CL_GRAPHICS_ENGINE      =    0x00000f08,
+  CL_TEXT_ENGINE          =    0x00000f09,
+  CL_LIGHT_MANAGER        =    0x00000f0a,
+  CL_EVENT_HANDLER        =    0x00000f0b,
+  CL_PHYSICS_ENGINE       =    0x00000f0c,
+  CL_CD_ENGINE            =    0x00000f0d,
+  CL_PARTICLE_ENGINE      =    0x00000f0e,
+  CL_SOUND_ENGINE         =    0x00000f0f,
+  CL_ANIMATION_PLAYER     =    0x00000f10,
+  CL_TRACK_MANAGER        =    0x00000f11,
+  CL_TRACK_NODE           =    0x00000f12,
+  CL_STATE                =    0x00000f13,
+  CL_FRAMEWORK            =    0x00000f14,
+
+
+
+  // StoryEntities (range from 0x00000101 to 0x000001ff)
+  CL_CAMPAIGN             =    0x00000101,
+  CL_WORLD                =    0x00000102,
+
+
+  // WorldEntities (range from 0x00000201 to 0x000004ff)
+  CL_CAMERA               =    0x00000201,
+  CL_CAMERA_TARGET        =    0x00000202,
+
+  CL_ENVIRONEMENT         =    0x00000203,
+  CL_SATELLITE            =    0x00000204,
+  CL_SKYBOX               =    0x00000205,
+  CL_SKYSPHERE            =    0x00000206,
+  CL_TERRAIN              =    0x00000207,
+  CL_TEST_BULLET          =    0x00000208,
+  CL_TEST_ENTITY          =    0x00000209,
+  CL_TEST_GUN             =    0x0000020a,
+
+
+  // gamePlay (range from 0x00000500 0x000005ff)
+  CL_EVENT                =    0x00000501,
+  CL_KEY_MAPPER           =    0x00000502,
+
+  CL_WEAPON_MANAGER       =    0x00000503,
+
+  // Physics stuff (range from 0x00000600 to 0x000007ff)
+  CL_PHYSICS_CONNECTION   =    0x00000601,
+  CL_FIELD_GRAVITY        =    0x00000610,
+  CL_FIELD_POINT_GRAVITY  =    0x00000611,
+  CL_FIELD_TWIRL          =    0x00000612,
+
+
+  // Collision
+  CL_COLLISION            =    0x00000611,
+  CL_BV_TREE              =    0x00000612,
+  CL_BV_TREE_NODE         =    0x00000613,
+  CL_OBB_TREE             =    0x00000614,
+  CL_OBB_TREE_NODE        =    0x00000615,
+  CL_BOUNDING_VOLUME      =    0x00000616,
+  CL_OBB                  =    0x00000617,
+  CL_BOUNDING_SPHERE      =    0x00000618,
+
+  // graphical stuff (range from 0x00000800 to 0x000009ff)
+  CL_TEXT                 =    0x00000801,
+  CL_FONT                 =    0x00000802,
+  CL_MATERIAL             =    0x00000803,
+  CL_MODEL                =    0x00000804, //!< \todo make this a SUBCLASS maybe
+  CL_OBJMODEL             =    0x00000805,
+  CL_PROMITIVE_MODEL      =    0x00000806,
+  CL_MD2Model             =    0x00000807,
+  CL_LIGHT                =    0x00000808,
+  CL_PARTICLE_EMITTER     =    0x00000809,
+  CL_PARTICLE_SYSTEM      =    0x0000080a,
+  CL_ENVIRONMENT          =    0x00000810,
+  // GL-menu
+  CL_GLMENU_IMAGE_SCREEN  =    0x00000901,
+
+  // sound stuff (range from 0x00000a00 to 0x00000aff)
+  CL_SOUND_BUFFER         =    0x00000a01,
+  CL_SOUND_SOURCE         =    0x00000a02,
+
+
+  // misc: (range from 0x00000b00 to 0x00000cff)
+  CL_ANIMATION            =    0x00000b01,
+  //  CL_ANIMATION3D          =    0x00000b02,
+  CL_QUICK_ANIMATION      =    0x00000b02,
+  CL_FACTORY              =    0x00000b03,
+  CL_INI_PARSER           =    0x00000b04,
+  CL_LIST                 =    0x00000b05,
+  CL_SUBSTRING            =    0x00000b06,
+  CL_LOAD_PARAM           =    0x00000b07,
+  CL_CURVE                =    0x00000b08,
+  CL_VECTOR               =    0x00000b09,
+  CL_CHARACTER_ATTRIBUTES =    0x00000b0a,
+  CL_TRACK_ELEMENT        =    0x00000b0b,
+  CL_NUMBER               =    0x00000b0c
+};
+
+
+#endif /* _CLASS_ID_H */
Index: orxonox/trunk/src/defs/class_list.h
===================================================================
--- orxonox/trunk/src/defs/class_list.h	(revision 4741)
+++ 	(revision )
@@ -1,179 +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
-
-   2005-06-10: (bensch) added new sturcture to support multiple inheritance
-*/
-
-/*!
-    \file class_list.h
-    \brief list of orxonox classes
-
-    this File is used to identify an Object with its class and also with its sub/super-classes.
-    this is also used by the ObjectManager to identify and load important classes
-
-    !! important !!
-    When adding a new CLASS be sure about the following:
-      1. if it is a (SUB)SUPERCLASS make sure there is still space left (if not think of a new approach)
-      2. if it is a (SUB)SUPERCLASS also add the CLASS to BaseObject::whatIs() so we have nice output :)
-      3. check if the Number you add is not refered to twice, and that with (SUB)SUPERCLASSES there are no intersections
-      4. be sure to add you stuff in the right section, and don't interest yourself for the order of things. :)
-*/
-
-#ifndef _CLASS_LIST_H
-#define _CLASS_LIST_H
-
-
-#define ClassDefinition(CLASS_DEFINITION, CLASS_VALUE, CLASS_NAME) \
-                  CLASS_DEFINITION
-
-//! list of all classes to be loadable in via the ObjectManager
-/**
- * inheritance is done in the following way: Classes are identified by
- * a HEX-number eg: 0x12345678
- * The number has 8^4 entries.
- * The first two: 1,2 superclass identifiers to
- * The second three are for subclasses with inheritance
- * These two may not be the same in any way,
- * eg. the bits may not intersect (no 1, 2 and a 3; 1,2 and 4 would be ok)
- * The last three entries are for any classes in existence eg. SkyBox and so on
- *
- * \todo complete this List
-*/
-typedef enum ClassID
-{
-  // superclasses
-  CL_MASK_SUPER_CLASS     =    0xff000000,
-  CL_BASE_OBJECT          =    0x01000000,
-
-  CL_PARENT_NODE          =    0x02000000,
-  CL_WORLD_ENTITY         =    0x04000000,
-
-  CL_STORY_ENTITY         =    0x08000000,
-
-  CL_PHYSICS_INTERFACE    =    0x10000000,
-
-  CL_EVENT_LISTENER       =    0x20000000,
-
-  // subsuper-classes
-  CL_MASK_SUBSUPER_CLASS  =    0x00fff000,
-  CL_PLAYER               =    0x00001000,
-  CL_NPC                  =    0x00002000,
-  CL_POWER_UP             =    0x00004000,
-  CL_FIELD                =    0x00008000,
-  CL_PROJECTILE           =    0x00010000,
-  CL_WEAPON               =    0x00020000,
-
-  // lowest level classes
-  CL_MASK_LOWLEVEL_CLASS  =    0x00000fff,
-
-  // singleton classes (range from 0x00000f01 to 0x00000fff)
-  CL_MASK_SINGLETON       =    0x00000f00,
-  CL_ORXONOX              =    0x00000f01,
-  CL_NULL_PARENT          =    0x00000f02,
-  CL_PILOT_PARENT         =    0x00000f03,
-  CL_OBJECT_MANAGER       =    0x00000f04,
-  CL_RESOURCE_MANAGER     =    0x00000f05,
-  CL_GARBAGE_COLLECTOR    =    0x00000f06,
-  CL_GAME_LOADER          =    0x00000f07,
-  CL_GRAPHICS_ENGINE      =    0x00000f08,
-  CL_TEXT_ENGINE          =    0x00000f09,
-  CL_LIGHT_MANAGER        =    0x00000f0a,
-  CL_EVENT_HANDLER        =    0x00000f0b,
-  CL_PHYSICS_ENGINE       =    0x00000f0c,
-  CL_CD_ENGINE            =    0x00000f0d,
-  CL_PARTICLE_ENGINE      =    0x00000f0e,
-  CL_SOUND_ENGINE         =    0x00000f0f,
-  CL_ANIMATION_PLAYER     =    0x00000f10,
-  CL_TRACK_MANAGER        =    0x00000f11,
-  CL_TRACK_NODE           =    0x00000f12,
-  CL_STATE                =    0x00000f13,
-  CL_FRAMEWORK            =    0x00000f14,
-
-
-
-  // StoryEntities (range from 0x00000101 to 0x000001ff)
-  CL_CAMPAIGN             =    0x00000101,
-  CL_WORLD                =    0x00000102,
-
-
-  // WorldEntities (range from 0x00000201 to 0x000004ff)
-  CL_CAMERA               =    0x00000201,
-  CL_CAMERA_TARGET        =    0x00000202,
-
-  CL_ENVIRONEMENT         =    0x00000203,
-  CL_SATELLITE            =    0x00000204,
-  CL_SKYBOX               =    0x00000205,
-  CL_SKYSPHERE            =    0x00000206,
-  CL_TERRAIN              =    0x00000207,
-  CL_TEST_BULLET          =    0x00000208,
-  CL_TEST_ENTITY          =    0x00000209,
-  CL_TEST_GUN             =    0x0000020a,
-
-
-  // gamePlay (range from 0x00000500 0x000005ff)
-  CL_EVENT                =    0x00000501,
-  CL_KEY_MAPPER           =    0x00000502,
-
-  CL_WEAPON_MANAGER       =    0x00000503,
-
-  // Physics stuff (range from 0x00000600 to 0x000007ff)
-  CL_PHYSICS_CONNECTION   =    0x00000601,
-  // Collision
-  CL_COLLISION            =    0x00000611,
-  CL_BV_TREE              =    0x00000612,
-  CL_BV_TREE_NODE         =    0x00000613,
-  CL_OBB_TREE             =    0x00000614,
-  CL_OBB_TREE_NODE        =    0x00000615,
-  CL_BOUNDING_VOLUME      =    0x00000616,
-  CL_OBB                  =    0x00000617,
-  CL_BOUNDING_SPHERE      =    0x00000618,
-
-  // graphical stuff (range from 0x00000800 to 0x000009ff)
-  CL_TEXT                 =    0x00000801,
-  CL_FONT                 =    0x00000802,
-  CL_MATERIAL             =    0x00000803,
-  CL_MODEL                =    0x00000804, //!< \todo make this a SUBCLASS maybe
-  CL_OBJMODEL             =    0x00000805,
-  CL_PROMITIVE_MODEL      =    0x00000806,
-  CL_MD2Model             =    0x00000807,
-  CL_LIGHT                =    0x00000808,
-  CL_PARTICLE_EMITTER     =    0x00000809,
-  CL_PARTICLE_SYSTEM      =    0x0000080a,
-  CL_ENVIRONMENT          =    0x00000810,
-  // GL-menu
-  CL_GLMENU_IMAGE_SCREEN  =    0x00000901,
-
-  // sound stuff (range from 0x00000a00 to 0x00000aff)
-  CL_SOUND_BUFFER         =    0x00000a01,
-  CL_SOUND_SOURCE         =    0x00000a02,
-
-
-  // misc: (range from 0x00000b00 to 0x00000cff)
-  CL_ANIMATION            =    0x00000b01,
-  //  CL_ANIMATION3D          =    0x00000b02,
-  CL_QUICK_ANIMATION      =    0x00000b02,
-  CL_FACTORY              =    0x00000b03,
-  CL_INI_PARSER           =    0x00000b04,
-  CL_LIST                 =    0x00000b05,
-  CL_SUBSTRING            =    0x00000b06,
-  CL_LOAD_PARAM           =    0x00000b07,
-  CL_CURVE                =    0x00000b08,
-  CL_VECTOR               =    0x00000b09,
-  CL_CHARACTER_ATTRIBUTES =    0x00000b0a,
-  CL_TRACK_ELEMENT        =    0x00000b0b,
-  CL_NUMBER               =    0x00000b0c
-};
-
-
-#endif /* _CLASS_LIST_H */
Index: orxonox/trunk/src/lib/collision_detection/cd_engine.cc
===================================================================
--- orxonox/trunk/src/lib/collision_detection/cd_engine.cc	(revision 4741)
+++ orxonox/trunk/src/lib/collision_detection/cd_engine.cc	(revision 4742)
@@ -31,5 +31,4 @@
 CDEngine::CDEngine ()
 {
-   this->setClassName("CDEngine");
    this->setClassID(CL_CD_ENGINE, "CDEngine");
 
Index: orxonox/trunk/src/lib/coord/p_node.cc
===================================================================
--- orxonox/trunk/src/lib/coord/p_node.cc	(revision 4741)
+++ orxonox/trunk/src/lib/coord/p_node.cc	(revision 4742)
@@ -101,5 +101,5 @@
 void PNode::init(PNode* parent)
 {
-  this->setClassID(CL_PARENT_NODE);
+  this->setClassID(CL_PARENT_NODE, "PNode");
   this->children = new tList<PNode>();
   this->bRelCoorChanged = true;
Index: orxonox/trunk/src/lib/lang/base_object.cc
===================================================================
--- orxonox/trunk/src/lib/lang/base_object.cc	(revision 4741)
+++ orxonox/trunk/src/lib/lang/base_object.cc	(revision 4742)
@@ -68,25 +68,5 @@
 void BaseObject::setClassID(long classID, const char* className)
 {
-  this->setClassID(classID);
-  this->setClassName(className);
-}
-
-
-/**
-   \brief sets the class identifier
-   \param id a number for the class from class_list.h enumeration
-*/
-void BaseObject::setClassID (long classID)
-{
   this->classID |= classID;
-}
-
-
-/**
-   \brief sets the class identifiers
-   \param className the class name
-*/
-void BaseObject::setClassName(const char* className)
-{
   this->className = className;
 }
@@ -95,5 +75,5 @@
   \brief set the name of the Object
  */
-             void BaseObject::setName (const char* objectName)
+void BaseObject::setName (const char* objectName)
 {
   if (this->objectName)
Index: orxonox/trunk/src/lib/lang/base_object.h
===================================================================
--- orxonox/trunk/src/lib/lang/base_object.h	(revision 4741)
+++ orxonox/trunk/src/lib/lang/base_object.h	(revision 4742)
@@ -4,6 +4,4 @@
 
     This is a global handler for all classes.
-
-    \todo isA()
 */
 
@@ -12,5 +10,5 @@
 #define _BASE_OBJECT_H
 
-#include "class_list.h"
+#include "class_id.h"
 #ifndef NULL
 #define NULL 0x0        //!< NULL
@@ -45,6 +43,4 @@
 
  protected:
-  void setClassID(long classID);
-  void setClassName(const char* className);
   void setClassID(long classID, const char* className);
 
@@ -52,10 +48,15 @@
   void finalize(void) { this->finalized = true; };
 
- private:
-  const char*    className;        //!< the name of the class
-  long           classID;          //!< this is the id from the class_list.h enumeration
-  char*          objectName;       //!< The name of this object
+  private:
+    static void addToClassList(BaseObject* object, ClassID id, const char* className);
 
-  bool           finalized;        //!< is true if the object is ready to be garbage collected
+  private:
+    const char*        className;        //!< the name of the class
+    long               classID;          //!< this is the id from the class_list.h enumeration
+    char*              objectName;       //!< The name of this object
+
+    bool               finalized;        //!< is true if the object is ready to be garbage collected
+
+//    static ClassList*  classList;
 };
 
Index: orxonox/trunk/src/lib/physics/fields/gravity.cc
===================================================================
--- orxonox/trunk/src/lib/physics/fields/gravity.cc	(revision 4741)
+++ orxonox/trunk/src/lib/physics/fields/gravity.cc	(revision 4742)
@@ -25,18 +25,10 @@
 CREATE_FACTORY(Gravity);
 
-/**
-   \brief standard constructor
-   \todo this constructor is not jet implemented - do it
-*/
-Gravity::Gravity ()
-{
-   this->setClassName("Gravity");
-}
-
 Gravity::Gravity(const TiXmlElement* root)
 {
-  this->setClassName("Gravity");
+  this->setClassID(CL_FIELD_GRAVITY, "Gravity");
 
-  this->loadParams(root);
+  if (root != NULL)
+    this->loadParams(root);
 }
 
Index: orxonox/trunk/src/lib/physics/fields/gravity.h
===================================================================
--- orxonox/trunk/src/lib/physics/fields/gravity.h	(revision 4741)
+++ orxonox/trunk/src/lib/physics/fields/gravity.h	(revision 4742)
@@ -18,6 +18,5 @@
 
  public:
-  Gravity();
-  Gravity(const TiXmlElement* root);
+  Gravity(const TiXmlElement* root = NULL);
   virtual ~Gravity();
 
Index: orxonox/trunk/src/lib/physics/fields/point_gravity.cc
===================================================================
--- orxonox/trunk/src/lib/physics/fields/point_gravity.cc	(revision 4741)
+++ orxonox/trunk/src/lib/physics/fields/point_gravity.cc	(revision 4742)
@@ -1,3 +1,3 @@
-/* 
+/*
    orxonox - the future of 3D-vertical-scrollers
 
@@ -25,7 +25,7 @@
    \todo this constructor is not jet implemented - do it
 */
-PointGravity::PointGravity () 
+PointGravity::PointGravity ()
 {
-   this->setClassName ("PointGravity");
+   this->setClassID(CL_FIELD_POINT_GRAVITY, "PointGravity");
 }
 
@@ -35,5 +35,5 @@
 
 */
-PointGravity::~PointGravity () 
+PointGravity::~PointGravity ()
 {
   // delete what has to be deleted here
Index: orxonox/trunk/src/lib/physics/fields/twirl.cc
===================================================================
--- orxonox/trunk/src/lib/physics/fields/twirl.cc	(revision 4741)
+++ orxonox/trunk/src/lib/physics/fields/twirl.cc	(revision 4742)
@@ -1,3 +1,3 @@
-/* 
+/*
    orxonox - the future of 3D-vertical-scrollers
 
@@ -25,7 +25,7 @@
    \todo this constructor is not jet implemented - do it
 */
-Twirl::Twirl () 
+Twirl::Twirl ()
 {
-   this->setClassName ("Twirl");
+   this->setClassID(CL_FIELD_TWIRL, "Twirl");
 }
 
@@ -35,5 +35,5 @@
 
 */
-Twirl::~Twirl () 
+Twirl::~Twirl ()
 {
   // delete what has to be deleted here
