Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/LevelManager.cc @ 6501

Last change on this file since 6501 was 6501, checked in by rgrieder, 14 years ago

Ensured OGRE v1.7 "Cthugha" code compatibility. Does not yet seem to run run though.

  • Property svn:eol-style set to native
File size: 4.3 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#include "LevelManager.h"
30
31#include <map>
32
33#include "core/CommandLineParser.h"
34#include "core/ConfigValueIncludes.h"
35#include "core/CoreIncludes.h"
36#include "core/Loader.h"
37#include "core/Resource.h"
38#include "core/ScopedSingletonManager.h"
39#include "PlayerManager.h"
40#include "Level.h"
41
42namespace orxonox
43{
44    SetCommandLineArgument(level, "").shortcut("l").information("Default level file (overrides LevelManager::defaultLevelName_ configValue)");
45
46    ManageScopedSingleton(LevelManager, ScopeID::Root, false);
47
48    LevelManager::LevelManager()
49    {
50        RegisterRootObject(LevelManager);
51        this->setConfigValues();
52
53        // check override
54        if (!CommandLineParser::getArgument("level")->hasDefaultValue())
55        {
56            ModifyConfigValue(defaultLevelName_, tset, CommandLineParser::getValue("level").getString());
57        }
58    }
59
60    LevelManager::~LevelManager()
61    {
62    }
63
64    void LevelManager::setConfigValues()
65    {
66        SetConfigValue(defaultLevelName_, "presentation_dm.oxw")
67            .description("Sets the pre selection of the level in the main menu.");
68    }
69
70    void LevelManager::requestActivity(Level* level)
71    {
72        this->levels_s.push_back(level);
73        if (this->levels_s.size() == 1)
74            this->activateNextLevel();
75    }
76
77    void LevelManager::releaseActivity(Level* level)
78    {
79        if (this->levels_s.size() > 0)
80        {
81            if (this->levels_s.front() == level)
82            {
83                level->setActive(false);
84                this->levels_s.pop_front();
85                this->activateNextLevel();
86            }
87            else
88            {
89                for (std::list<Level*>::iterator it = this->levels_s.begin(); it != this->levels_s.end(); ++it)
90                    if ((*it) == level)
91                        this->levels_s.erase(it);
92            }
93        }
94    }
95
96    Level* LevelManager::getActiveLevel()
97    {
98        if (this->levels_s.size() > 0)
99            return this->levels_s.front();
100        else
101            return 0;
102    }
103
104    void LevelManager::activateNextLevel()
105    {
106        if (this->levels_s.size() > 0)
107        {
108            this->levels_s.front()->setActive(true);
109            for (std::map<unsigned int, PlayerInfo*>::const_iterator it = PlayerManager::getInstance().getClients().begin(); it != PlayerManager::getInstance().getClients().end(); ++it)
110                this->levels_s.front()->playerEntered(it->second);
111        }
112    }
113
114    void LevelManager::setDefaultLevel(const std::string& levelName)
115    {
116        ModifyConfigValue(defaultLevelName_, set, levelName);
117    }
118
119    const std::string& LevelManager::getDefaultLevel() const
120    {
121        return defaultLevelName_;
122    }
123
124    const std::string& LevelManager::getAvailableLevelListItem(unsigned int index) const
125    {
126        if (index >= availableLevels_.size())
127            return BLANKSTRING;
128        else
129            return availableLevels_[index];
130    }
131
132    void LevelManager::compileAvailableLevelList()
133    {
134        this->availableLevels_.clear();
135        Ogre::StringVectorPtr levels = Resource::findResourceNames("*.oxw");
136        for (Ogre::StringVector::const_iterator it = levels->begin(); it != levels->end(); ++it)
137        {
138            if (it->find("old/") != 0)
139            {
140                size_t pos = it->find(".oxw");
141                this->availableLevels_.push_back(it->substr(0, pos));
142            }
143        }
144    }
145}
Note: See TracBrowser for help on using the repository browser.