/* 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 * 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: * the first of these numbers is defining the subclassType, it may be anything between 1-a * The following 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 * * -> # max SuperClass-count = 7 (not intersecting) * # max SubSuperClass-count = 15*7 = 105 (the 7 classes will be able to get derived from each other, but not over the SubSuperClass.) * # max lowerClasses-count = 3^16 = enough (they are Leaves, and may NOT be derived by any other class.) */ typedef enum ClassID { // the Nothing CLASS (NULL) CL_NULL = 0x00000000, // 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, CL_ELEMENT_2D = 0x40000000, // subsuper-classes CL_MASK_SUBSUPER_CLASS = 0x00fff000, CL_MASK_SUBSUPER_CLASS_ID = 0x00f00000, CL_MASK_SUBSUPER_CLASS_ID2 = 0x000ff000, CL_PLAYER = 0x00101000, CL_NPC = 0x00102000, CL_POWER_UP = 0x00104000, CL_FIELD = 0x00108000, CL_PROJECTILE = 0x00110000, CL_WEAPON = 0x00120000, // subsuper-classes derivations taken : 1, a. << THIS IS A LIST OF ALL THE DCL_MASK_SUBSUPERCLASS_ID's taken // lowest level classes CL_MASK_LOWLEVEL_CLASS = 0x00000fff, // singleton classes (range from 0x00000f00 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, CL_RENDER_2D = 0x00000f15, // StoryEntities (range from 0x00000100 to 0x000001ff) CL_CAMPAIGN = 0x00000101, CL_WORLD = 0x00000102, // WorldEntities (range from 0x00000200 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_CROSSHAIR = 0x0000050f, 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 = 0x00a01612, CL_BV_TREE_NODE = 0x00a02613, CL_OBB_TREE = 0x00a04614, CL_OBB_TREE_NODE = 0x00a08615, CL_BOUNDING_VOLUME = 0x00a10616, CL_OBB = 0x00a20617, CL_BOUNDING_SPHERE = 0x00a40618, // 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, // Spatial Data Separation CL_SPATIAL_SEPARATION = 0x00000b0d, CL_QUADTREE = 0x00000b0e, CL_QUADTREE_NODE = 0x00000b0f }; #endif /* _CLASS_ID_H */