Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/util/object_manager.h @ 4734

Last change on this file since 4734 was 4699, checked in by bensch, 19 years ago

orxonox/trunk: news about the new webdev-development package

File size: 2.1 KB
Line 
1/*!
2    \file object_manager.h
3    \brief this manager will ceep track of the objects  in the world
4
5    This is specially designed to:
6    - Give an interface to the world data
7    - separate the world data from the world build,update,draw process
8    - recycle deleted objects: specific for Projectils since there is a lot of world entity creation/deletion (and this needs a lot of time)
9    - control the garbage collector
10
11    TO ADD SUPPORT FOR A CLASS do the following steps:
12    1. include the hader file : #include "class_header.h"
13    2. add the class to the type enum classList {}; in class_list.h
14    3. define a function void mCache( ClassName ) in class ObjectManager
15
16*/
17
18
19#ifndef _OBJECT_MANAGER_H
20#define _OBJECT_MANAGER_H
21
22#include "base_object.h"
23#include "projectile.h"
24#include "list.h"
25
26#include "class_list.h"
27
28
29class GarbageCollector;
30
31
32//! This defines the "template" macro function for cache(...)
33#define mCache( Class ) \
34 cache(ClassID index, int number, Class * copyObject)        \
35{                                                              \
36  this->managedObjectList[index] = new tList<BaseObject>(); \
37  for(int i = 0; i < number; ++i)\
38    {\
39      this->managedObjectList[index]->add(new Class (*copyObject));\
40    }\
41}
42
43
44
45//! the object manager itself
46class ObjectManager : public BaseObject {
47
48 public:
49  virtual ~ObjectManager(void);
50  /** \returns a Pointer to the only object of this Class */
51  inline static ObjectManager* getInstance(void) { if (!singletonRef) singletonRef = new ObjectManager();  return singletonRef; };
52
53  void registerClass(ClassID classID);
54
55  /** a class handled by the objectManage */
56  void mCache(Projectile);
57  void addToDeadList(int index, BaseObject* object);
58  BaseObject* getFromDeadList(int index, int number = 1);
59
60  void debug(void) const;
61
62 private:
63  ObjectManager(void);
64
65 private:
66  static ObjectManager*      singletonRef;          //!< The singleton reference to the only reference of this class
67
68  tList<BaseObject>**        managedObjectList;     //!< A list of managed objects (handles different types and lists of them)
69};
70
71
72
73#endif /* _OBJECT_MANAGER_H */
Note: See TracBrowser for help on using the repository browser.