Skip to content

Commit 6ea5b78

Browse files
committed
TextScroller: Use exit script properly
fixes #3219
1 parent 805d08b commit 6ea5b78

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

src/object/textscroller.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,13 @@ TextScroller::update(float dt_sec)
299299

300300
// use start or escape keys to exit
301301
if (controller->pressed_any(Control::START, Control::ESCAPE) &&
302-
!m_fading && m_finish_script.empty()) {
302+
!m_fading) {
303303
m_fading = true;
304-
ScreenManager::current()->pop_screen(std::make_unique<FadeToBlack>(FadeToBlack::FADEOUT, 0.5f));
304+
if (!m_finish_script.empty()) {
305+
Sector::get().run_script(m_finish_script, "finishscript");
306+
} else {
307+
ScreenManager::current()->pop_screen(std::make_unique<FadeToBlack>(FadeToBlack::FADEOUT, 0.5f));
308+
}
305309
return;
306310
}
307311
}
@@ -310,17 +314,17 @@ TextScroller::update(float dt_sec)
310314

311315
if (m_scroll < 0)
312316
m_scroll = 0;
313-
if (!m_finish_script.empty())
314-
{
315-
Sector::get().run_script(m_finish_script, "finishscript");
316-
}
317317
else
318318
{
319319
// close when done
320320
if (m_finished && !m_fading)
321321
{
322-
m_fading = true;
323-
ScreenManager::current()->pop_screen(std::unique_ptr<ScreenFade>(new FadeToBlack(FadeToBlack::FADEOUT, 0.25f)));
322+
m_fading = true;
323+
if (!m_finish_script.empty()) {
324+
Sector::get().run_script(m_finish_script, "finishscript");
325+
} else {
326+
ScreenManager::current()->pop_screen(std::unique_ptr<ScreenFade>(new FadeToBlack(FadeToBlack::FADEOUT, 0.25f)));
327+
}
324328
}
325329
}
326330
}

src/object/textscroller.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class TextScroller : public LayerObject
5151

5252
inline void set_default_speed(float default_speed) { m_default_speed = default_speed; }
5353
inline bool is_finished() const { return m_finished; }
54+
inline bool is_fading() const { return m_fading; }
5455

5556
protected:
5657
const Controller* controller;

src/supertux/game_session.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "object/music_object.hpp"
3333
#include "object/player.hpp"
3434
#include "object/spawnpoint.hpp"
35+
#include "object/textscroller.hpp"
3536
#include "sdk/integration.hpp"
3637
#include "squirrel/squirrel_virtual_machine.hpp"
3738
#include "supertux/constants.hpp"
@@ -312,6 +313,14 @@ GameSession::on_escape_press(bool force_quick_respawn)
312313
return; // Don't let the player open the menu, when Tux is dying.
313314
}
314315

316+
int textscrollers = m_currentsector->get_object_count<TextScroller>([](const TextScroller& ts) {
317+
return !ts.is_fading();
318+
});
319+
320+
if (textscrollers) {
321+
return;
322+
}
323+
315324
if (m_level->m_is_in_cutscene && !m_level->m_skip_cutscene)
316325
{
317326
m_level->m_skip_cutscene = true;

0 commit comments

Comments
 (0)