Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/mergeFS18/src/orxonox/LevelManager.h @ 12371

Last change on this file since 12371 was 11071, checked in by landauf, 9 years ago

merged branch cpp11_v3 back to trunk

  • Property svn:eol-style set to native
File size: 5.1 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 *      Damian 'Mozork' Frick
26 *
27 */
28
29/**
30    @file LevelManager.h
31    @brief Definition of the LevelManager singleton.
32    @ingroup Orxonox
33*/
34
35#ifndef _LevelManager_H__
36#define _LevelManager_H__
37
38#include "OrxonoxPrereqs.h"
39
40#include <cassert>
41#include <list>
42#include <map>
43#include <string>
44
45#include "LevelInfo.h"
46
47#include "util/Singleton.h"
48#include "core/config/Configurable.h"
49
50// tolua_begin
51namespace orxonox
52{
53
54    /**
55    @brief
56        The LevelManager keeps track of @ref orxonox::Level "Levels" whose activity has been requested and activates the @ref orxonox::Level "Levels" in the list in a FIFO manner with exactly one Level (the first in the list) being active at all times (unless the list is empty).
57        It also serves as an access point to get a list of all available @ref orxonox::Level "Levels" (or rather their respective @ref orxonox::LevelInfoItem "LevelInfoItems").
58
59    @author
60        Fabian 'x3n' Landau
61
62    @author
63        Damian 'Mozork' Frick
64
65    @ingroup Orxonox
66    */
67    class _OrxonoxExport LevelManager
68    // tolua_end
69        : public Singleton<LevelManager>, public Configurable
70    { // tolua_export
71            friend class Singleton<LevelManager>;
72        public:
73            LevelManager();
74            virtual ~LevelManager();
75
76            void setConfigValues(); //!< Set the config values for this object.
77
78            void requestActivity(Level* level); //!< Request activity for the input Level.
79            void releaseActivity(Level* level); //!< Release activity for the input Level.
80            Level* getActiveLevel(); //!< Get the currently active Level.
81
82            // tolua_begin
83            void setDefaultLevel(const std::string& levelName); //!< Set the default Level.
84            /**
85            @brief Get the default level.
86            @return Returns the filename of the default level.
87            */
88            const std::string& getDefaultLevel() const
89                { return defaultLevelName_; }
90            unsigned int getNumberOfLevels(void);
91            LevelInfoItem* getAvailableLevelListItem(unsigned int index); //!< Get the LevelInfoItem at the given index in the list of available Levels.
92
93            void setLastFinishedCampaignMission(const std::string& lastFinishedCampaignMission);
94            inline const std::string& getLastFinishedCampaignMission() const
95                { return this->lastFinishedCampaignMission_; }
96
97            inline unsigned int getNumberOfCampaignMissions()
98                { return this->campaignMissions_.size(); }
99            inline const std::string& getCampaignMission(unsigned int index)
100                { return this->campaignMissions_[index]; }
101
102            /**
103            @brief Get the instance of the LevelManager.
104            @return Returns the instance of the LevelManager.
105            */
106            static LevelManager& getInstance()
107                { return Singleton<LevelManager>::getInstance(); }
108            // tolua_end
109
110        private:
111            // non-copyable:
112            LevelManager(const LevelManager&) = delete;
113            LevelManager& operator=(const LevelManager&) = delete;
114
115            void activateNextLevel(); //!< Activate the next level.
116
117            void compileAvailableLevelList(void); //!< Compile the list of available Levels.
118            void updateAvailableLevelList(void); //!< Update the list of available Levels.
119
120            std::list<Level*> levels_; //!< A list of all the Levels whose activity has been requested, in the order in which they will become active.
121            std::set<LevelInfoItem*, LevelInfoCompare> availableLevels_; //!< The set of available Levels sorted alphabetically according to the name of the Level.
122
123            // Helpers to allow fast access to the availableLevels list.
124            unsigned int nextIndex_; //! The next expected index to be accessed.
125            std::set<LevelInfoItem*, LevelInfoCompare>::iterator nextLevel_; //! The next expected Level to be accessed.
126
127            // config values
128            std::string defaultLevelName_;
129            std::string lastFinishedCampaignMission_;
130            std::vector<std::string> campaignMissions_;
131
132            static LevelManager* singletonPtr_s;
133    }; // tolua_export
134} // tolua_export
135
136#endif /* _LevelManager_H__ */
Note: See TracBrowser for help on using the repository browser.