Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/questsystem5/src/orxonox/overlays/OverlayGroup.h @ 2916

Last change on this file since 2916 was 2908, checked in by dafrick, 16 years ago

Reverted to revision 2906 (because I'm too stupid to merge correctly, 2nd try will follow shortly. ;))

  • Property svn:eol-style set to native
File size: 3.6 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 *      Reto Grieder
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30@file
31@brief Declaration of the OverlayGroup class.
32*/
33
34#ifndef _OverlayGroup_H__
35#define _OverlayGroup_H__
36
37#include "OrxonoxPrereqs.h"
38
39#include <map>
40#include <OgrePrerequisites.h>
41#include "core/BaseObject.h"
42#include "util/Math.h"
43
44namespace orxonox
45{
46    /**
47    @brief
48        OverlayGroup does almost exactly what it says: It groups OrxonoxOverlays together.
49        You can scroll the entire group by a certain amount. Scale however works differently
50        than expected: Each OrxonoxOverlay scales individually. That's quite useful when you
51        create your HUD with an OverlayGroup and then want to alter its size.
52    */
53    class _OrxonoxExport OverlayGroup : public BaseObject
54    {
55    public:
56        OverlayGroup(BaseObject* creator);
57        //! Empty destructor.
58        ~OverlayGroup();
59
60        virtual void XMLPort(Element& xmlElement, XMLPort::Mode mode);
61
62        static void toggleVisibility(const std::string& name);
63        static void scaleGroup(const std::string& name, float scale);
64        static void scrollGroup(const std::string& name, const Vector2& scroll);
65
66        inline const std::map<std::string, OrxonoxOverlay*>& getOverlays() const
67            { return this->hudElements_; }
68
69        void changedVisibility();
70
71        void setOwner(ControllableEntity* owner);
72        inline ControllableEntity* getOwner() const
73            { return this->owner_; }
74
75        //! Scales each OrxonoxOverlay individually by scale.
76        void scale(const Vector2& scale) { this->setScale(scale * this->scale_); }
77        void setScale(const Vector2& scale);
78        //! Returns the current size of the group.
79        Vector2 getScale() const { return this->scale_; }
80
81        //! Scrolls each OrxonoxOverlay individually by scroll.
82        void scroll(const Vector2& scroll) { this->setScroll(scroll + this->scroll_); }
83        void setScroll(const Vector2& scroll);
84        //! Returns the current scrolling offset of the group.
85        Vector2 getScroll() const { return this->scale_; }
86
87        void addElement(OrxonoxOverlay* element);
88                void insertElement(OrxonoxOverlay* element, const std::string & name);
89        bool removeElement(const std::string & name);
90        OrxonoxOverlay* getElement(unsigned int index);
91
92    private:
93        std::map<std::string, OrxonoxOverlay*> hudElements_;    //!< Contains all the OrxonoxOverlays of the this group.
94        Vector2 scale_;                                         //!< Current scale (independent of the elements).
95        Vector2 scroll_;                                        //!< Current scrolling offset.
96        ControllableEntity* owner_;                             //!< The owner of this OverlayGroup
97    };
98}
99
100#endif /* _OverlayGroup_H__ */
Note: See TracBrowser for help on using the repository browser.