Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/objecthierarchy/src/orxonox/core/OrxonoxClass.h @ 366

Last change on this file since 366 was 366, checked in by landauf, 16 years ago

moved common object-functions and -variables (like isA() and name_) from BaseObject to OrxonoxClass, so they can still be used while iterating through a list of objects inheriting from an interface.

File size: 5.1 KB
Line 
1/*!
2    @file OrxonoxClass.h
3    @brief Definition of the OrxonoxClass Class.
4
5    All objects and interfaces of the game-logic are derived from OrxonoxClass.
6    It stores the Identifier and the MetaObjectList and has all needed functions to create the class-hierarchy.
7*/
8
9#ifndef _OrxonoxClass_H__
10#define _OrxonoxClass_H__
11
12#include "Identifier.h"
13#include "IdentifierList.h"
14#include "ObjectList.h"
15#include "MetaObjectList.h"
16
17namespace orxonox
18{
19    //! The class all objects and interfaces of the game-logic are derived from.
20    /**
21        BaseObject and Interaces are derived with 'virtual public OrxonoxClass' from OrxonoxClass.
22        OrxonoxClass is needed to create the class-hierarchy at startup and to store the Identifier and the MetaObjectList.
23    */
24    class OrxonoxClass
25    {
26        public:
27            OrxonoxClass();
28            virtual ~OrxonoxClass();
29
30            /** @returns the Identifier of the object */
31            inline Identifier* getIdentifier() const { return this->identifier_; }
32
33            /** @brief Sets the Identifier of the object. Used by the RegisterObject-macro. */
34            inline void setIdentifier(Identifier* identifier) { this->identifier_ = identifier; }
35
36            /** @returns the list of all parents of the object */
37            inline IdentifierList* getParents() const { return this->parents_; }
38
39            /** @brief Sets the Parents of the object. Used by the RegisterObject-macro. */
40            inline void setParents(IdentifierList* parents) { this->parents_ = parents; }
41
42            /** @returns the MetaObjectList of the object, containing a link to all ObjectLists and ObjectListElements the object is registered in. */
43            inline MetaObjectList& getMetaList() { return this->metaList_; }
44
45            inline bool isA(const Identifier* identifier)
46                { return this->getIdentifier()->isA(identifier); }
47            inline bool isDirectlyA(const Identifier* identifier)
48                { return this->getIdentifier()->isDirectlyA(identifier); }
49            inline bool isChildOf(const Identifier* identifier)
50                { return this->getIdentifier()->isChildOf(identifier); }
51            inline bool isParentOf(const Identifier* identifier)
52                { return this->getIdentifier()->isParentOf(identifier); }
53
54            inline bool isA(const SubclassIdentifier<class B>* identifier)
55                { return this->getIdentifier()->isA(identifier->getIdentifier()); }
56            inline bool isDirectlyA(const SubclassIdentifier<class B>* identifier)
57                { return this->getIdentifier()->isDirectlyA(identifier->getIdentifier()); }
58            inline bool isChildOf(const SubclassIdentifier<class B>* identifier)
59                { return this->getIdentifier()->isChildOf(identifier->getIdentifier()); }
60            inline bool isParentOf(const SubclassIdentifier<class B>* identifier)
61                { return this->getIdentifier()->isParentOf(identifier->getIdentifier()); }
62
63            inline bool isA(const SubclassIdentifier<class B> identifier)
64                { return this->getIdentifier()->isA(identifier.getIdentifier()); }
65            inline bool isDirectlyA(const SubclassIdentifier<class B> identifier)
66                { return this->getIdentifier()->isDirectlyA(identifier.getIdentifier()); }
67            inline bool isChildOf(const SubclassIdentifier<class B> identifier)
68                { return this->getIdentifier()->isChildOf(identifier.getIdentifier()); }
69            inline bool isParentOf(const SubclassIdentifier<class B> identifier)
70                { return this->getIdentifier()->isParentOf(identifier.getIdentifier()); }
71
72            inline bool isA(const OrxonoxClass* object)
73                { return this->getIdentifier()->isA(object->getIdentifier()); }
74            inline bool isDirectlyA(const OrxonoxClass* object)
75                { return this->getIdentifier()->isDirectlyA(object->getIdentifier()); }
76            inline bool isChildOf(const OrxonoxClass* object)
77                { return this->getIdentifier()->isChildOf(object->getIdentifier()); }
78            inline bool isParentOf(const OrxonoxClass* object)
79                { return this->getIdentifier()->isParentOf(object->getIdentifier()); }
80
81
82            inline void setName(const std::string& name) { this->name_ = name; }
83            inline const std::string& getName() const { return this->name_; }
84
85            inline void setActive(bool bActive) { this->bActive_ = bActive; }
86            inline const bool isActive() const { return this->bActive_; }
87
88            inline void setVisible(bool bVisible) { this->bVisible_ = bVisible; }
89            inline const bool isVisible() const { return this->bVisible_; }
90
91        private:
92            Identifier* identifier_;        //!< The Identifier of the object
93            IdentifierList* parents_;       //!< List of all parents of the object
94            MetaObjectList metaList_;       //!< MetaObjectList, containing all ObjectLists and ObjectListElements the object is registered in
95
96            std::string name_;
97            bool bActive_;
98            bool bVisible_;
99    };
100}
101
102#endif
Note: See TracBrowser for help on using the repository browser.