Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 7283 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
RevLine 
[1661]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
[2850]29#include "GSMainMenu.h"
[1661]30
[2850]31#include <OgreSceneManager.h>
[3196]32
[5863]33#include "core/input/KeyBinderManager.h"
[3196]34#include "core/Game.h"
[6417]35#include "core/ConfigValueIncludes.h"
36#include "core/CoreIncludes.h"
[3370]37#include "core/GraphicsManager.h"
38#include "core/GUIManager.h"
[7204]39#include "core/command/ConsoleCommand.h"
[5735]40#include "Scene.h"
[5896]41#include "sound/AmbientSound.h"
[6746]42// HACK
43#include "core/input/InputManager.h"
44#include "core/input/InputState.h"
[1661]45
46namespace orxonox
47{
[3280]48    DeclareGameState(GSMainMenu, "mainMenu", false, true);
[2844]49
[7219]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
[7236]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();
[7219]63
[3370]64    GSMainMenu::GSMainMenu(const GameStateInfo& info)
65        : GameState(info)
[1661]66    {
[6417]67        RegisterRootObject(GSMainMenu);
[1688]68
[6746]69        InputManager::getInstance().createInputState("MainMenuHackery")->setKeyHandler(KeyBinderManager::getInstance().getDefaultAsHandler());
70
[2850]71        // create an empty Scene
[5876]72        this->scene_ = new Scene(NULL);
[5918]73        this->scene_->setSyncMode( 0x0 );
[2850]74        // and a Camera
75        this->camera_ = this->scene_->getSceneManager()->createCamera("mainMenu/Camera");
[5878]76        if (GameMode::playsSound())
77        {
78            // Load sound
[5896]79            this->ambient_ = new AmbientSound(0);
[6417]80            this->ambient_->setSyncMode(0x0);
[5878]81        }
[3370]82    }
[2850]83
[3370]84    GSMainMenu::~GSMainMenu()
85    {
[5878]86        if (GameMode::playsSound())
[6417]87            this->ambient_->destroy();
[5878]88
[6746]89        InputManager::getInstance().destroyState("MainMenuHackery");
[3370]90
91        this->scene_->getSceneManager()->destroyCamera(this->camera_);
[5799]92        this->scene_->destroy();
[3370]93    }
94
95    void GSMainMenu::activate()
96    {
[1661]97        // show main menu
[6746]98        GUIManager::getInstance().showGUI("MainMenu", true);
[2850]99        GUIManager::getInstance().setCamera(this->camera_);
[6746]100        GUIManager::getInstance().setBackgroundImage("MainMenuBackground", "Background");
[2850]101        GraphicsManager::getInstance().setCamera(this->camera_);
[2844]102
[6746]103        InputManager::getInstance().enterState("MainMenuHackery");
104
[7236]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);
[2853]111
[5863]112        KeyBinderManager::getInstance().setToDefault();
[3060]113
[6417]114        this->setConfigValues();
115
[5878]116        if (GameMode::playsSound())
117        {
[6417]118            this->ambient_->setLooping(true);
119            this->ambient_->play(); // works without source
[5878]120        }
[1661]121    }
122
[2850]123    void GSMainMenu::deactivate()
[1661]124    {
[5878]125        if (GameMode::playsSound())
126        {
127            this->ambient_->stop();
128        }
[3060]129
[6746]130        InputManager::getInstance().leaveState("MainMenuHackery");
[2850]131
[2927]132        GUIManager::getInstance().setCamera(0);
[6746]133        GUIManager::getInstance().setBackgroundImage("");
[6417]134        GUIManager::hideGUI("MainMenu");
[2927]135        GraphicsManager::getInstance().setCamera(0);
[7219]136
[7236]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);
[1661]143    }
144
[2850]145    void GSMainMenu::update(const Clock& time)
[1661]146    {
[2844]147    }
[1661]148
[6417]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
[3094]174    void GSMainMenu::startStandalone()
[2844]175    {
176        // HACK - HACK
177        Game::getInstance().popState();
[2850]178        Game::getInstance().requestStates("standalone, level");
[1661]179    }
[3094]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();
[6105]200        Game::getInstance().requestStates("server, level");
[3094]201    }
[5817]202    void GSMainMenu::startMainMenu()
203    {
204        // HACK - HACK
205        Game::getInstance().popState();
206        Game::getInstance().popState();
207        Game::getInstance().requestStates("mainmenu");
208    }
[1661]209}
Note: See TracBrowser for help on using the repository browser.