projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Only pause game on focus lose when game session is active
[supertux.git]
/
src
/
supertux
/
game_session.cpp
diff --git
a/src/supertux/game_session.cpp
b/src/supertux/game_session.cpp
index
3ddedfc
..
d29300d
100644
(file)
--- a/
src/supertux/game_session.cpp
+++ b/
src/supertux/game_session.cpp
@@
-30,6
+30,8
@@
#include "object/endsequence_walkright.hpp"
#include "object/level_time.hpp"
#include "object/player.hpp"
#include "object/endsequence_walkright.hpp"
#include "object/level_time.hpp"
#include "object/player.hpp"
+#include "scripting/scripting.hpp"
+#include "scripting/squirrel_util.hpp"
#include "scripting/squirrel_util.hpp"
#include "supertux/gameconfig.hpp"
#include "supertux/globals.hpp"
#include "scripting/squirrel_util.hpp"
#include "supertux/gameconfig.hpp"
#include "supertux/globals.hpp"
@@
-55,7
+57,7
@@
GameSession::GameSession(const std::string& levelfile_, Savegame& savegame, Stat
pause_menu_frame(),
end_sequence(0),
game_pause(false),
pause_menu_frame(),
end_sequence(0),
game_pause(false),
- speed_before_pause(
g_screen_manager
->get_speed()),
+ speed_before_pause(
ScreenManager::current()
->get_speed()),
levelfile(levelfile_),
reset_sector(),
reset_pos(),
levelfile(levelfile_),
reset_sector(),
reset_pos(),
@@
-73,14
+75,15
@@
GameSession::GameSession(const std::string& levelfile_, Savegame& savegame, Stat
coins_at_start(),
bonus_at_start(),
max_fire_bullets_at_start(),
coins_at_start(),
bonus_at_start(),
max_fire_bullets_at_start(),
- max_ice_bullets_at_start()
+ max_ice_bullets_at_start(),
+ active(false)
{
if (restart_level() != 0)
throw std::runtime_error ("Initializing the level failed.");
}
int
{
if (restart_level() != 0)
throw std::runtime_error ("Initializing the level failed.");
}
int
-GameSession::restart_level()
+GameSession::restart_level(
bool after_death
)
{
PlayerStatus* currentStatus = m_savegame.get_player_status();
coins_at_start = currentStatus->coins;
{
PlayerStatus* currentStatus = m_savegame.get_player_status();
coins_at_start = currentStatus->coins;
@@
-96,7
+99,7
@@
GameSession::restart_level()
game_pause = false;
end_sequence = 0;
game_pause = false;
end_sequence = 0;
-
g_input_manager
->reset();
+
InputManager::current()
->reset();
currentsector = 0;
currentsector = 0;
@@
-125,12
+128,16
@@
GameSession::restart_level()
}
} catch(std::exception& e) {
log_fatal << "Couldn't start level: " << e.what() << std::endl;
}
} catch(std::exception& e) {
log_fatal << "Couldn't start level: " << e.what() << std::endl;
-
g_screen_manager
->pop_screen();
+
ScreenManager::current()
->pop_screen();
return (-1);
}
return (-1);
}
-
- sound_manager->stop_music();
- currentsector->play_music(LEVEL_MUSIC);
+ if(after_death == true) {
+ currentsector->resume_music();
+ }
+ else {
+ SoundManager::current()->stop_music();
+ currentsector->play_music(LEVEL_MUSIC);
+ }
if(capture_file != "") {
int newSeed=0; // next run uses a new seed
if(capture_file != "") {
int newSeed=0; // next run uses a new seed
@@
-242,10
+249,12
@@
void
GameSession::toggle_pause()
{
// pause
GameSession::toggle_pause()
{
// pause
- if(!game_pause) {
- speed_before_pause = g_screen_manager->get_speed();
- g_screen_manager->set_speed(0);
+ if (!game_pause && !MenuManager::instance().is_active())
+ {
+ speed_before_pause = ScreenManager::current()->get_speed();
+ ScreenManager::current()->set_speed(0);
MenuManager::instance().set_menu(MenuStorage::GAME_MENU);
MenuManager::instance().set_menu(MenuStorage::GAME_MENU);
+ SoundManager::current()->pause_music();
game_pause = true;
}
game_pause = true;
}
@@
-256,7
+265,7
@@
void
GameSession::abort_level()
{
MenuManager::instance().clear_menu_stack();
GameSession::abort_level()
{
MenuManager::instance().clear_menu_stack();
-
g_screen_manager
->pop_screen();
+
ScreenManager::current()
->pop_screen();
currentsector->player->set_bonus(bonus_at_start);
PlayerStatus *currentStatus = m_savegame.get_player_status();
currentStatus->coins = coins_at_start;
currentsector->player->set_bonus(bonus_at_start);
PlayerStatus *currentStatus = m_savegame.get_player_status();
currentStatus->coins = coins_at_start;
@@
-264,15
+273,21
@@
GameSession::abort_level()
currentStatus->max_ice_bullets = max_ice_bullets_at_start;
}
currentStatus->max_ice_bullets = max_ice_bullets_at_start;
}
+bool
+GameSession::is_active() const
+{
+ return !game_pause && active;
+}
+
void
void
-GameSession::set_editmode(bool edit_mode)
+GameSession::set_editmode(bool edit_mode
_
)
{
{
- if (this->edit_mode == edit_mode) return;
- this->edit_mode = edit_mode;
+ if (this->edit_mode == edit_mode
_
) return;
+ this->edit_mode = edit_mode
_
;
- currentsector->get_players()[0]->set_edit_mode(edit_mode);
+ currentsector->get_players()[0]->set_edit_mode(edit_mode
_
);
- if (edit_mode) {
+ if (edit_mode
_
) {
// entering edit mode
// entering edit mode
@@
-348,7
+363,7
@@
GameSession::process_events()
// save input for demo?
if(capture_demo_stream != 0) {
// save input for demo?
if(capture_demo_stream != 0) {
- Controller *controller =
g_input_manager
->get_controller();
+ Controller *controller =
InputManager::current()
->get_controller();
capture_demo_stream ->put(controller->hold(Controller::LEFT));
capture_demo_stream ->put(controller->hold(Controller::RIGHT));
capture_demo_stream ->put(controller->hold(Controller::UP));
capture_demo_stream ->put(controller->hold(Controller::LEFT));
capture_demo_stream ->put(controller->hold(Controller::RIGHT));
capture_demo_stream ->put(controller->hold(Controller::UP));
@@
-367,7
+382,7
@@
GameSession::check_end_conditions()
if(end_sequence && end_sequence->is_done()) {
finish(true);
} else if (!end_sequence && tux->is_dead()) {
if(end_sequence && end_sequence->is_done()) {
finish(true);
} else if (!end_sequence && tux->is_dead()) {
- restart_level();
+ restart_level(
true
);
}
}
}
}
@@
-403,7
+418,8
@@
GameSession::setup()
int total_stats_to_be_collected = level->stats.total_coins + level->stats.total_badguys + level->stats.total_secrets;
if ((!levelintro_shown) && (total_stats_to_be_collected > 0)) {
levelintro_shown = true;
int total_stats_to_be_collected = level->stats.total_coins + level->stats.total_badguys + level->stats.total_secrets;
if ((!levelintro_shown) && (total_stats_to_be_collected > 0)) {
levelintro_shown = true;
- g_screen_manager->push_screen(std::unique_ptr<Screen>(new LevelIntro(level.get(), best_level_statistics)));
+ active = false;
+ ScreenManager::current()->push_screen(std::unique_ptr<Screen>(new LevelIntro(level.get(), best_level_statistics)));
}
}
}
}
@@
-415,24
+431,34
@@
GameSession::leave()
void
GameSession::update(float elapsed_time)
{
void
GameSession::update(float elapsed_time)
{
+ // Set active flag
+ if(!active)
+ {
+ active = true;
+ }
// handle controller
// handle controller
- if(g_input_manager->get_controller()->pressed(Controller::PAUSE_MENU))
+ if(InputManager::current()->get_controller()->pressed(Controller::ESCAPE) ||
+ InputManager::current()->get_controller()->pressed(Controller::START))
{
on_escape_press();
}
{
on_escape_press();
}
- if(g_input_manager->get_controller()->pressed(Controller::CHEAT_MENU))
+ if(InputManager::current()->get_controller()->pressed(Controller::CHEAT_MENU) &&
+ g_config->developer_mode)
{
{
- game_pause = true;
- MenuManager::instance().set_menu(MenuStorage::CHEAT_MENU);
+ if (!MenuManager::instance().is_active())
+ {
+ game_pause = true;
+ MenuManager::instance().set_menu(MenuStorage::CHEAT_MENU);
+ }
}
process_events();
}
process_events();
- MenuManager::instance().check_menu();
// Unpause the game if the menu has been closed
if (game_pause && !MenuManager::instance().is_active()) {
// Unpause the game if the menu has been closed
if (game_pause && !MenuManager::instance().is_active()) {
- g_screen_manager->set_speed(speed_before_pause);
+ ScreenManager::current()->set_speed(speed_before_pause);
+ SoundManager::current()->resume_music();
game_pause = false;
}
game_pause = false;
}
@@
-471,8
+497,11
@@
GameSession::update(float elapsed_time)
}
}
}
}
+ if(currentsector == NULL)
+ return;
+
// update sounds
// update sounds
- if (currentsector
&& currentsector->camera) sound_manager
->set_listener_position(currentsector->camera->get_center());
+ if (currentsector
->camera) SoundManager::current()
->set_listener_position(currentsector->camera->get_center());
/* Handle music: */
if (end_sequence)
/* Handle music: */
if (end_sequence)
@@
-512,7
+541,7
@@
GameSession::finish(bool win)
}
}
}
}
-
g_screen_manager
->pop_screen();
+
ScreenManager::current()
->pop_screen();
}
void
}
void
@@
-560,33
+589,33
@@
GameSession::start_sequence(const std::string& sequencename)
if (sequencename == "endsequence") {
if (currentsector->get_players()[0]->get_physic().get_velocity_x() < 0) {
if (sequencename == "endsequence") {
if (currentsector->get_players()[0]->get_physic().get_velocity_x() < 0) {
- end_sequence =
new EndSequenceWalkLeft
();
+ end_sequence =
std::make_shared<EndSequenceWalkLeft>
();
} else {
} else {
- end_sequence =
new EndSequenceWalkRight
();
+ end_sequence =
std::make_shared<EndSequenceWalkRight>
();
}
} else if (sequencename == "fireworks") {
}
} else if (sequencename == "fireworks") {
- end_sequence =
new EndSequenceFireworks
();
+ end_sequence =
std::make_shared<EndSequenceFireworks>
();
} else {
log_warning << "Unknown sequence '" << sequencename << "'. Ignoring." << std::endl;
return;
}
/* slow down the game for end-sequence */
} else {
log_warning << "Unknown sequence '" << sequencename << "'. Ignoring." << std::endl;
return;
}
/* slow down the game for end-sequence */
-
g_screen_manager
->set_speed(0.5f);
+
ScreenManager::current()
->set_speed(0.5f);
currentsector->add_object(end_sequence);
end_sequence->start();
currentsector->add_object(end_sequence);
end_sequence->start();
-
sound_manager
->play_music("music/leveldone.ogg", false);
+
SoundManager::current()
->play_music("music/leveldone.ogg", false);
currentsector->player->set_winning();
// Stop all clocks.
currentsector->player->set_winning();
// Stop all clocks.
- for(
std::vector<GameObject*>::iterator
i = currentsector->gameobjects.begin();
+ for(
auto
i = currentsector->gameobjects.begin();
i != currentsector->gameobjects.end(); ++i)
{
i != currentsector->gameobjects.end(); ++i)
{
- GameObject
*
obj = *i;
+ GameObject
Ptr
obj = *i;
-
LevelTime* lt = dynamic_cast<LevelTime*>
(obj);
+
auto lt = std::dynamic_pointer_cast<LevelTime>
(obj);
if(lt)
lt->stop();
}
if(lt)
lt->stop();
}