diff --git a/src/object/textscroller.cpp b/src/object/textscroller.cpp index c3a8f817e8..b330b7c194 100644 --- a/src/object/textscroller.cpp +++ b/src/object/textscroller.cpp @@ -299,9 +299,8 @@ TextScroller::update(float dt_sec) // use start or escape keys to exit if (controller->pressed_any(Control::START, Control::ESCAPE) && - !m_fading && m_finish_script.empty()) { - m_fading = true; - ScreenManager::current()->pop_screen(std::make_unique(FadeToBlack::FADEOUT, 0.5f)); + !m_fading) { + start_fading(); return; } } @@ -310,21 +309,27 @@ TextScroller::update(float dt_sec) if (m_scroll < 0) m_scroll = 0; - if (!m_finish_script.empty()) - { - Sector::get().run_script(m_finish_script, "finishscript"); - } else { // close when done if (m_finished && !m_fading) { - m_fading = true; - ScreenManager::current()->pop_screen(std::unique_ptr(new FadeToBlack(FadeToBlack::FADEOUT, 0.25f))); + start_fading(); } } } +void +TextScroller::start_fading() +{ + m_fading = true; + if (!m_finish_script.empty()) { + Sector::get().run_script(m_finish_script, "finishscript"); + } else { + ScreenManager::current()->pop_screen(std::make_unique(FadeToBlack::FADEOUT, 0.5f)); + } +} + void TextScroller::scroll(float offset) { diff --git a/src/object/textscroller.hpp b/src/object/textscroller.hpp index 930817866b..4a76bf528e 100644 --- a/src/object/textscroller.hpp +++ b/src/object/textscroller.hpp @@ -52,6 +52,7 @@ class TextScroller : public LayerObject inline void set_default_speed(float default_speed) { m_default_speed = default_speed; } inline bool is_finished() const { return m_finished; } + inline bool is_fading() const { return m_fading; } protected: const Controller* controller; @@ -60,6 +61,7 @@ class TextScroller : public LayerObject void parse_file(const std::string& filename); void parse_root(const ReaderObject& root); void parse_content(const ReaderCollection& collection); + void start_fading(); private: std::string m_filename; diff --git a/src/supertux/game_session.cpp b/src/supertux/game_session.cpp index a2341dd6eb..f2c4fad8ad 100644 --- a/src/supertux/game_session.cpp +++ b/src/supertux/game_session.cpp @@ -32,6 +32,7 @@ #include "object/music_object.hpp" #include "object/player.hpp" #include "object/spawnpoint.hpp" +#include "object/textscroller.hpp" #include "sdk/integration.hpp" #include "squirrel/squirrel_virtual_machine.hpp" #include "supertux/constants.hpp" @@ -312,6 +313,14 @@ GameSession::on_escape_press(bool force_quick_respawn) return; // Don't let the player open the menu, when Tux is dying. } + int textscrollers = m_currentsector->get_object_count([](const TextScroller& ts) { + return !ts.is_fading(); + }); + + if (textscrollers) { + return; + } + if (m_level->m_is_in_cutscene && !m_level->m_skip_cutscene) { m_level->m_skip_cutscene = true;