Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/consolecommands3/src/orxonox/gamestates/GSMainMenu.cc @ 7739

Last change on this file since 7739 was 7236, checked in by landauf, 14 years ago

replaced the temporary names of all ConsoleCommand related classes and functions by their real names

  • Property svn:eol-style set to native
File size: 6.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 *      Reto Grieder
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "GSMainMenu.h"
30
31#include <OgreSceneManager.h>
32
33#include "core/input/KeyBinderManager.h"
34#include "core/Game.h"
35#include "core/ConfigValueIncludes.h"
36#include "core/CoreIncludes.h"
37#include "core/GraphicsManager.h"
38#include "core/GUIManager.h"
39#include "core/command/ConsoleCommand.h"
40#include "Scene.h"
41#include "sound/AmbientSound.h"
42// HACK
43#include "core/input/InputManager.h"
44#include "core/input/InputState.h"
45
46namespace orxonox
47{
48    DeclareGameState(GSMainMenu, "mainMenu", false, true);
49
50    static const std::string __CC_startStandalone_name      = "startGame";
51    static const std::string __CC_startServer_name          = "startServer";
52    static const std::string __CC_startClient_name          = "startClient";
53    static const std::string __CC_startDedicated_name       = "startDedicated";
54    static const std::string __CC_startMainMenu_name        = "startMainMenu";
55    static const std::string __CC_setMainMenuSoundPath_name = "setMMSoundPath";
56
57    SetConsoleCommand(__CC_startStandalone_name,      &GSMainMenu::startStandalone).deactivate();
58    SetConsoleCommand(__CC_startServer_name,          &GSMainMenu::startServer    ).deactivate();
59    SetConsoleCommand(__CC_startClient_name,          &GSMainMenu::startClient    ).deactivate();
60    SetConsoleCommand(__CC_startDedicated_name,       &GSMainMenu::startDedicated ).deactivate();
61    SetConsoleCommand(__CC_startMainMenu_name,        &GSMainMenu::startMainMenu  ).deactivate();
62    SetConsoleCommand(__CC_setMainMenuSoundPath_name, &GSMainMenu::setMainMenuSoundPath).hide();
63
64    GSMainMenu::GSMainMenu(const GameStateInfo& info)
65        : GameState(info)
66    {
67        RegisterRootObject(GSMainMenu);
68
69        InputManager::getInstance().createInputState("MainMenuHackery")->setKeyHandler(KeyBinderManager::getInstance().getDefaultAsHandler());
70
71        // create an empty Scene
72        this->scene_ = new Scene(NULL);
73        this->scene_->setSyncMode( 0x0 );
74        // and a Camera
75        this->camera_ = this->scene_->getSceneManager()->createCamera("mainMenu/Camera");
76        if (GameMode::playsSound())
77        {
78            // Load sound
79            this->ambient_ = new AmbientSound(0);
80            this->ambient_->setSyncMode(0x0);
81        }
82    }
83
84    GSMainMenu::~GSMainMenu()
85    {
86        if (GameMode::playsSound())
87            this->ambient_->destroy();
88
89        InputManager::getInstance().destroyState("MainMenuHackery");
90
91        this->scene_->getSceneManager()->destroyCamera(this->camera_);
92        this->scene_->destroy();
93    }
94
95    void GSMainMenu::activate()
96    {
97        // show main menu
98        GUIManager::getInstance().showGUI("MainMenu", true);
99        GUIManager::getInstance().setCamera(this->camera_);
100        GUIManager::getInstance().setBackgroundImage("MainMenuBackground", "Background");
101        GraphicsManager::getInstance().setCamera(this->camera_);
102
103        InputManager::getInstance().enterState("MainMenuHackery");
104
105        ModifyConsoleCommand(__CC_startStandalone_name).activate();
106        ModifyConsoleCommand(__CC_startServer_name    ).activate();
107        ModifyConsoleCommand(__CC_startClient_name    ).activate();
108        ModifyConsoleCommand(__CC_startDedicated_name ).activate();
109        ModifyConsoleCommand(__CC_startMainMenu_name  ).activate();
110        ModifyConsoleCommand(__CC_setMainMenuSoundPath_name).setObject(this);
111
112        KeyBinderManager::getInstance().setToDefault();
113
114        this->setConfigValues();
115
116        if (GameMode::playsSound())
117        {
118            this->ambient_->setLooping(true);
119            this->ambient_->play(); // works without source
120        }
121    }
122
123    void GSMainMenu::deactivate()
124    {
125        if (GameMode::playsSound())
126        {
127            this->ambient_->stop();
128        }
129
130        InputManager::getInstance().leaveState("MainMenuHackery");
131
132        GUIManager::getInstance().setCamera(0);
133        GUIManager::getInstance().setBackgroundImage("");
134        GUIManager::hideGUI("MainMenu");
135        GraphicsManager::getInstance().setCamera(0);
136
137        ModifyConsoleCommand(__CC_startStandalone_name).deactivate();
138        ModifyConsoleCommand(__CC_startServer_name    ).deactivate();
139        ModifyConsoleCommand(__CC_startClient_name    ).deactivate();
140        ModifyConsoleCommand(__CC_startDedicated_name ).deactivate();
141        ModifyConsoleCommand(__CC_startMainMenu_name  ).deactivate();
142        ModifyConsoleCommand(__CC_setMainMenuSoundPath_name).setObject(0);
143    }
144
145    void GSMainMenu::update(const Clock& time)
146    {
147    }
148
149    void GSMainMenu::setConfigValues()
150    {
151        SetConfigValue(soundPathMain_, "mainmenu.ogg")
152            .description("Contains the path to the main menu sound file.")
153            .callback(this, &GSMainMenu::reloadSound);
154    }
155
156    void GSMainMenu::reloadSound()
157    {
158        if (GameMode::playsSound())
159        {
160            this->ambient_->setAmbientSource(soundPathMain_);
161        }
162    }
163
164    const std::string& GSMainMenu::getMainMenuSoundPath()
165    {
166        return soundPathMain_;
167    }
168
169    void GSMainMenu::setMainMenuSoundPath(const std::string& path)
170    {
171        ModifyConfigValue(soundPathMain_, set, path);
172    }
173
174    void GSMainMenu::startStandalone()
175    {
176        // HACK - HACK
177        Game::getInstance().popState();
178        Game::getInstance().requestStates("standalone, level");
179    }
180
181    void GSMainMenu::startServer()
182    {
183        // HACK - HACK
184        Game::getInstance().popState();
185        Game::getInstance().requestStates("server, level");
186    }
187
188    void GSMainMenu::startClient()
189    {
190        // HACK - HACK
191        Game::getInstance().popState();
192        Game::getInstance().requestStates("client, level");
193    }
194
195    void GSMainMenu::startDedicated()
196    {
197        // HACK - HACK
198        Game::getInstance().popState();
199        Game::getInstance().popState();
200        Game::getInstance().requestStates("server, level");
201    }
202    void GSMainMenu::startMainMenu()
203    {
204        // HACK - HACK
205        Game::getInstance().popState();
206        Game::getInstance().popState();
207        Game::getInstance().requestStates("mainmenu");
208    }
209}
Note: See TracBrowser for help on using the repository browser.