Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation2/src/orxonox/gamestates/GSMainMenu.cc @ 6256

Last change on this file since 6256 was 6234, checked in by rgrieder, 15 years ago

Fixed the sound bug where it didn't play when setting the source too late.
And fixed it again by moving setConfigValues in GSMainMenu.
Sound works for me now.

  • 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", true, false);
86        GUIManager::getInstance().setCamera(this->camera_);
87        GUIManager::getInstance().setBackground("MainMenuBackground");
88//         GUIManager::getInstance().setBackground("");
89        GraphicsManager::getInstance().setCamera(this->camera_);
90
91        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startStandalone), "startGame"));
92        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startServer), "startServer"));
93        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startClient), "startClient"));
94        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startDedicated), "startDedicated"));
95        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::startMainMenu), "startMainMenu"));
96       
97        // create command to change sound path
98        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSMainMenu::setMainMenuSoundPath, this), "setMMSoundPath"));
99
100        KeyBinderManager::getInstance().setToDefault();
101        InputManager::getInstance().enterState("mainMenu");
102
103        this->setConfigValues();
104
105        if (GameMode::playsSound())
106        {
107            this->ambient_->setLooping(true);
108            this->ambient_->play(); // works without source
109        }
110    }
111
112    void GSMainMenu::deactivate()
113    {
114        if (GameMode::playsSound())
115        {
116            this->ambient_->stop();
117        }
118
119        InputManager::getInstance().leaveState("mainMenu");
120
121        GUIManager::getInstance().setCamera(0);
122        GUIManager::getInstance().setBackground("");
123        GUIManager::hideGUI("MainMenu");
124        GraphicsManager::getInstance().setCamera(0);
125    }
126
127    void GSMainMenu::update(const Clock& time)
128    {
129    }
130
131    void GSMainMenu::setConfigValues()
132    {
133        SetConfigValue(soundPathMain_, "mainmenu.ogg")
134            .description("Contains the path to the main menu sound file.")
135            .callback(this, &GSMainMenu::reloadSound);
136    }
137
138    void GSMainMenu::reloadSound()
139    {
140        if (GameMode::playsSound())
141        {
142            this->ambient_->setAmbientSource(soundPathMain_);
143        }
144    }
145
146    const std::string& GSMainMenu::getMainMenuSoundPath()
147    {
148        return soundPathMain_;
149    }
150
151    void GSMainMenu::setMainMenuSoundPath(const std::string& path)
152    {
153        ModifyConfigValue(soundPathMain_, set, path);
154    }
155
156    void GSMainMenu::startStandalone()
157    {
158        // HACK - HACK
159        Game::getInstance().popState();
160        Game::getInstance().requestStates("standalone, level");
161    }
162
163    void GSMainMenu::startServer()
164    {
165        // HACK - HACK
166        Game::getInstance().popState();
167        Game::getInstance().requestStates("server, level");
168    }
169
170    void GSMainMenu::startClient()
171    {
172        // HACK - HACK
173        Game::getInstance().popState();
174        Game::getInstance().requestStates("client, level");
175    }
176
177    void GSMainMenu::startDedicated()
178    {
179        // HACK - HACK
180        Game::getInstance().popState();
181        Game::getInstance().popState();
182        Game::getInstance().requestStates("server, level");
183    }
184    void GSMainMenu::startMainMenu()
185    {
186        // HACK - HACK
187        Game::getInstance().popState();
188        Game::getInstance().popState();
189        Game::getInstance().requestStates("mainmenu");
190    }
191}
Note: See TracBrowser for help on using the repository browser.