Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/sound3/src/orxonox/gamestates/GSMainMenu.cc @ 6046

Last change on this file since 6046 was 6031, checked in by youngk, 15 years ago

Implemented automatic ambient sound file path fetch according to current mood.
Valid moods are: default and dnb
BUG Loading of a second sound fails (independent of the file used). Probably an error in BaseSound::setSource().

  • Property svn:eol-style set to native
File size: 6.0 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/InputManager.h"
34#include "core/input/InputState.h"
35#include "core/input/KeyBinderManager.h"
36#include "core/Game.h"
37#include "core/ConsoleCommand.h"
38#include "core/ConfigValueIncludes.h"
39#include "core/GraphicsManager.h"
40#include "core/GUIManager.h"
41#include "Scene.h"
42#include "sound/AmbientSound.h"
43
44namespace orxonox
45{
46    DeclareGameState(GSMainMenu, "mainMenu", false, true);
47
48    GSMainMenu::GSMainMenu(const GameStateInfo& info)
49        : GameState(info)
50        , inputState_(0)
51    {
52                RegisterRootObject(GSMainMenu);
53        inputState_ = InputManager::getInstance().createInputState("mainMenu");
54        inputState_->setMouseMode(MouseMode::Nonexclusive);
55        inputState_->setHandler(GUIManager::getInstancePtr());
56        inputState_->setKeyHandler(KeyBinderManager::getInstance().getDefaultAsHandler());
57        inputState_->setJoyStickHandler(&InputHandler::EMPTY);
58
59        // create an empty Scene
60        this->scene_ = new Scene(NULL);
61        this->scene_->setSyncMode( 0x0 );
62        // and a Camera
63        this->camera_ = this->scene_->getSceneManager()->createCamera("mainMenu/Camera");
64        if (GameMode::playsSound())
65        {
66            // Load sound
67            this->ambient_ = new AmbientSound(0);
68        }
69    }
70
71    GSMainMenu::~GSMainMenu()
72    {
73        if (GameMode::playsSound())
74            delete this->ambient_;
75
76        InputManager::getInstance().destroyState("mainMenu");
77
78        this->scene_->getSceneManager()->destroyCamera(this->camera_);
79        this->scene_->destroy();
80    }
81
82    void GSMainMenu::activate()
83    {
84        // show main menu
85        GUIManager::getInstance().showGUI("MainMenu");
86        GUIManager::getInstance().setCamera(this->camera_);
87        GraphicsManager::getInstance().setCamera(this->camera_);
88
89        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startStandalone), "startGame"));
90        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startServer), "startServer"));
91        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startClient), "startClient"));
92        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startDedicated), "startDedicated"));
93        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startMainMenu), "startMainMenu"));
94        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startIOConsole), "startIOConsole"));
95               
96                // create command to change sound path
97                CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::setMainMenuSoundPath, this), "setMMSoundPath"));
98
99        KeyBinderManager::getInstance().setToDefault();
100        InputManager::getInstance().enterState("mainMenu");
101
102        if (GameMode::playsSound())
103        {
104            this->ambient_->setLoop(true);
105                        this->ambient_->setPlayOnLoad(true);
106        }
107
108                this->setConfigValues();
109    }
110
111    void GSMainMenu::deactivate()
112    {
113        if (GameMode::playsSound())
114        {
115            this->ambient_->stop();
116        }
117
118        InputManager::getInstance().leaveState("mainMenu");
119
120        GUIManager::getInstance().setCamera(0);
121        GraphicsManager::getInstance().setCamera(0);
122    }
123
124    void GSMainMenu::update(const Clock& time)
125    {
126    }
127
128        void GSMainMenu::setConfigValues()
129    {
130        SetConfigValue(soundPathMain_, "mainmenu.wav")
131            .description("Contains the path to the main menu sound file.")
132                        .callback(this, &GSMainMenu::reloadSound);
133    }
134
135        void GSMainMenu::reloadSound() {
136                if (GameMode::playsSound())
137        {
138                        this->ambient_->setSource(soundPathMain_);
139                }
140        }
141
142        const std::string& GSMainMenu::getMainMenuSoundPath() {
143                return soundPathMain_;
144        }
145
146        void GSMainMenu::setMainMenuSoundPath(const std::string& path) {
147                ModifyConfigValue(soundPathMain_, set, path);
148        }
149
150    void GSMainMenu::startStandalone()
151    {
152        // HACK - HACK
153        Game::getInstance().popState();
154        Game::getInstance().requestStates("standalone, level");
155    }
156
157    void GSMainMenu::startServer()
158    {
159        // HACK - HACK
160        Game::getInstance().popState();
161        Game::getInstance().requestStates("server, level");
162    }
163
164    void GSMainMenu::startClient()
165    {
166        // HACK - HACK
167        Game::getInstance().popState();
168        Game::getInstance().requestStates("client, level");
169    }
170
171    void GSMainMenu::startDedicated()
172    {
173        // HACK - HACK
174        Game::getInstance().popState();
175        Game::getInstance().popState();
176        Game::getInstance().requestStates("dedicated, level");
177    }
178    void GSMainMenu::startMainMenu()
179    {
180        // HACK - HACK
181        Game::getInstance().popState();
182        Game::getInstance().popState();
183        Game::getInstance().requestStates("mainmenu");
184    }
185    void GSMainMenu::startIOConsole()
186    {
187        // HACK - HACK
188        Game::getInstance().popState();
189        Game::getInstance().popState();
190        Game::getInstance().requestStates("ioConsole");
191    }
192}
Note: See TracBrowser for help on using the repository browser.