Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/objecthierarchy2/src/core/BaseObject.h @ 2345

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

Update your media repository and delete keybindings.ini if you want to use boost (space).

  • Added new class "Engine" to control the speed of a SpaceShip (Engine is an Item, MultiStateEngine is a specialized version of Engine)
  • Added FadingBillboard, a billboard with the ability to fade in and out smoothly when activated/deactivated.
  • Several changes in Backlight, it's now a child of FadingBillboard
  • Some changes concerning local control in ControllableEntity
  • Fixed a bug in WorldEntity caused by different destruction order of attached objects on server and client
  • Added a "MainState" to BaseObject. An object has several states (activity, visibility, …) and one of it can be defined as "MainState" in the XML file. Other objects can change this state without knowing which state it really is (used by MultiStateEngine).
  • Property svn:eol-style set to native
File size: 8.9 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30    @file
31    @brief Definition of the BaseObject class.
32
33    The BaseObject is the parent of all classes representing an instance in the game.
34*/
35
36#ifndef _BaseObject_H__
37#define _BaseObject_H__
38
39#define SetMainState(classname, statename, setfunction, getfunction) \
40    if (this->getMainStateName() == statename) \
41    { \
42        this->functorSetMainState_ = createFunctor(&classname::setfunction)->setObject(this); \
43        this->functorGetMainState_ = createFunctor(&classname::getfunction)->setObject(this); \
44    }
45
46#include <map>
47
48#include "CorePrereqs.h"
49
50#include "Super.h"
51#include "OrxonoxClass.h"
52#include "XMLIncludes.h"
53#include "Event.h"
54#include "util/mbool.h"
55
56namespace orxonox
57{
58    class Scene;
59    class Gametype;
60
61    //! The BaseObject is the parent of all classes representing an instance in the game.
62    class _CoreExport BaseObject : virtual public OrxonoxClass
63    {
64        public:
65            BaseObject(BaseObject* creator);
66            virtual ~BaseObject();
67            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
68
69            /** @brief Returns if the object was initialized (passed the object registration). @return True was the object is initialized */
70            inline bool isInitialized() const { return this->bInitialized_; }
71
72            /** @brief Sets the name of the object. @param name The name */
73            inline void setName(const std::string& name) { this->oldName_ = this->name_; this->name_ = name; this->changedName(); }
74            /** @brief Returns the name of the object. */
75            inline const std::string& getName() const { return this->name_; }
76            /** @brief Returns the old name of the object. */
77            inline const std::string& getOldName() const { return this->oldName_; }
78            /** @brief This function gets called if the name of the object changes. */
79            virtual void changedName() {}
80
81            /** @brief Sets the state of the objects activity. @param bActive True = active */
82            inline void setActive(bool bActive)
83            {
84                if (this->bActive_ != bActive)
85                {
86                    this->bActive_ = bActive;
87                    this->changedActivity();
88                }
89            }
90            /** @brief Returns the state of the objects activity. @return The state of the activity */
91            inline const mbool& isActive() const { return this->bActive_; }
92            /** @brief This function gets called if the activity of the object changes. */
93            virtual void changedActivity() {}
94
95            /** @brief Sets the state of the objects visibility. @param bVisible True = visible */
96            inline void setVisible(bool bVisible)
97            {
98                if (this->bVisible_ != bVisible)
99                {
100                    this->bVisible_ = bVisible;
101                    this->changedVisibility();
102                }
103            }
104            /** @brief Returns the state of the objects visibility. @return The state of the visibility */
105            inline const mbool& isVisible() const { return this->bVisible_; }
106            /** @brief This function gets called if the visibility of the object changes. */
107            virtual void changedVisibility() {}
108
109            void setMainState(bool state);
110            bool getMainState() const;
111
112            void setMainStateName(const std::string& name);
113            inline const std::string& getMainStateName() const { return this->mainStateName_; }
114            virtual void changedMainState();
115
116            /** @brief Sets a pointer to the xml file that loaded this object. @param file The pointer to the XMLFile */
117            inline void setFile(const XMLFile* file) { this->file_ = file; }
118            /** @brief Returns a pointer to the XMLFile that loaded this object. @return The XMLFile */
119            inline const XMLFile* getFile() const { return this->file_; }
120            const std::string& getFilename() const;
121
122            void addTemplate(const std::string& name);
123            void addTemplate(Template* temp);
124            /** @brief Returns the set of all aplied templates. */
125            inline const std::set<Template*>& getTemplates() const
126                { return this->templates_; }
127
128            virtual inline void setNamespace(Namespace* ns) { this->namespace_ = ns; }
129            inline Namespace* getNamespace() const { return this->namespace_; }
130
131            inline void setCreator(BaseObject* creator) { this->creator_ = creator; }
132            inline BaseObject* getCreator() const { return this->creator_; }
133
134            inline void setScene(Scene* scene) { this->scene_ = scene; }
135            inline Scene* getScene() const { return this->scene_; }
136
137            inline void setGametype(Gametype* gametype) { this->oldGametype_ = this->gametype_; this->gametype_ = gametype; this->changedGametype(); }
138            inline Gametype* getGametype() const { return this->gametype_; }
139            inline Gametype* getOldGametype() const { return this->oldGametype_; }
140            virtual inline void changedGametype() {}
141
142            void fireEvent();
143            void fireEvent(bool activate);
144            void fireEvent(bool activate, BaseObject* originator);
145            void fireEvent(Event& event);
146
147            virtual void processEvent(Event& event);
148
149            inline void registerEventListener(BaseObject* object, const std::string& sectionname)
150                { this->eventListeners_[object] = sectionname; }
151            inline void unregisterEventListener(BaseObject* object)
152                { this->eventListeners_.erase(object); }
153
154            void addEvent(BaseObject* event, const std::string& sectionname);
155            void removeEvent(BaseObject* event);
156            BaseObject* getEvent(unsigned int index) const;
157
158            void addEventContainer(const std::string& sectionname, EventContainer* container);
159            EventContainer* getEventContainer(const std::string& sectionname) const;
160
161            /** @brief Sets the indentation of the debug output in the Loader. @param indentation The indentation */
162            inline void setLoaderIndentation(const std::string& indentation) { this->loaderIndentation_ = indentation; }
163            /** @brief Returns the indentation of the debug output in the Loader. @return The indentation */
164            inline const std::string& getLoaderIndentation() const { return this->loaderIndentation_; }
165
166        protected:
167            std::string name_;                          //!< The name of the object
168            std::string oldName_;                       //!< The old name of the object
169            mbool       bActive_;                       //!< True = the object is active
170            mbool       bVisible_;                      //!< True = the object is visible
171            std::string mainStateName_;
172            Functor*    functorSetMainState_;
173            Functor*    functorGetMainState_;
174
175        private:
176            void setXMLName(const std::string& name);
177            Template* getTemplate(unsigned int index) const;
178
179            bool                   bInitialized_;         //!< True if the object was initialized (passed the object registration)
180            const XMLFile*         file_;                 //!< The XMLFile that loaded this object
181            std::string            loaderIndentation_;    //!< Indentation of the debug output in the Loader
182            Namespace*             namespace_;
183            BaseObject*            creator_;
184            Scene*                 scene_;
185            Gametype*              gametype_;
186            Gametype*              oldGametype_;
187            std::set<Template*>    templates_;
188            std::map<BaseObject*,  std::string> eventListeners_;
189            std::list<BaseObject*> events_;
190            std::map<std::string, EventContainer*> eventContainers_;
191    };
192
193    SUPER_FUNCTION(0, BaseObject, XMLPort, false);
194    SUPER_FUNCTION(2, BaseObject, changedActivity, false);
195    SUPER_FUNCTION(3, BaseObject, changedVisibility, false);
196    SUPER_FUNCTION(4, BaseObject, processEvent, false);
197    SUPER_FUNCTION(6, BaseObject, changedMainState, false);
198}
199
200#endif /* _BaseObject_H__ */
Note: See TracBrowser for help on using the repository browser.