Skip to content

Commit

Permalink
Allow scrolling in credits screen with up/down keys.
Browse files Browse the repository at this point in the history
Fixes #1231.

All keyboard handling has been moved from TextScrollerScreen to
TextScroller.
  • Loading branch information
martinvanzijl authored and tobbi committed May 21, 2020
1 parent 3aa2ea5 commit b7791eb
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 44 deletions.
50 changes: 36 additions & 14 deletions src/object/textscroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,16 @@ namespace {

const float LEFT_BORDER = 0;
const float DEFAULT_SPEED = 60;
const float SCROLL_JUMP = 60;

} // namespace

TextScroller::TextScroller(const ReaderMapping& mapping) :
controller(),
controller(&InputManager::current()->get_controller()),
m_filename(),
m_lines(),
m_scroll(),
m_speed(DEFAULT_SPEED),
m_default_speed(DEFAULT_SPEED),
m_finished(false),
m_fading(false)
{
Expand All @@ -59,15 +60,15 @@ TextScroller::TextScroller(const ReaderMapping& mapping) :
parse_file(m_filename);
}

mapping.get("speed", m_speed);
mapping.get("speed", m_default_speed);
}

TextScroller::TextScroller(const ReaderObject& root) :
controller(),
controller(&InputManager::current()->get_controller()),
m_filename(),
m_lines(),
m_scroll(),
m_speed(DEFAULT_SPEED),
m_default_speed(DEFAULT_SPEED),
m_finished(false),
m_fading(false)
{
Expand Down Expand Up @@ -236,16 +237,37 @@ TextScroller::draw(DrawingContext& context)
void
TextScroller::update(float dt_sec)
{
m_scroll += m_speed * dt_sec;
float speed = m_default_speed;

if (controller) {
// allow changing speed with up and down keys
if (controller->hold(Control::UP)) {
speed = -m_default_speed * 5;
} else if (controller->hold(Control::DOWN)) {
speed = m_default_speed * 5;
}

// allow jumping ahead with certain keys
if ((controller->pressed(Control::JUMP) ||
controller->pressed(Control::ACTION) ||
controller->pressed(Control::MENU_SELECT)) &&
!(controller->pressed(Control::UP))) { // prevent skipping if jump with up is enabled
scroll(SCROLL_JUMP);
}

// use start or escape keys to exit
if (controller->pressed(Control::START) ||
controller->pressed(Control::ESCAPE)) {
ScreenManager::current()->pop_screen(std::make_unique<FadeToBlack>(FadeToBlack::FADEOUT, 0.5));
return;
}
}

m_scroll += speed * dt_sec;

if (m_scroll < 0)
m_scroll = 0;

if (controller.pressed(Control::START) ||
controller.pressed(Control::ESCAPE)) {
ScreenManager::current()->pop_screen(std::unique_ptr<ScreenFade>(new FadeToBlack(FadeToBlack::FADEOUT, 0.25)));
}

{ // close when done
if (m_finished && !m_fading)
{
Expand All @@ -256,9 +278,9 @@ TextScroller::update(float dt_sec)
}

void
TextScroller::set_speed(float speed)
TextScroller::set_default_speed(float default_speed)
{
m_speed = speed;
m_default_speed = default_speed;
}

void
Expand All @@ -276,7 +298,7 @@ TextScroller::get_settings()
{
ObjectSettings result = GameObject::get_settings();

result.add_float(_("Speed"), &m_speed, "speed", DEFAULT_SPEED);
result.add_float(_("Speed"), &m_default_speed, "speed", DEFAULT_SPEED);
result.add_file(_("File"), &m_filename, "file");

return result;
Expand Down
6 changes: 3 additions & 3 deletions src/object/textscroller.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ class TextScroller : public GameObject
virtual std::string get_class() const override { return "textscroller"; }
virtual std::string get_display_name() const override { return _("TextScroller"); }

void set_speed(float speed);
void set_default_speed(float default_speed);
void scroll(float offset);
bool is_finished() const { return m_finished; }

protected:
Controller controller;
const Controller* controller;

private:
void parse_file(const std::string& filename);
Expand All @@ -59,7 +59,7 @@ class TextScroller : public GameObject
std::string m_filename;
std::vector<std::unique_ptr<InfoBoxLine> > m_lines;
float m_scroll;
float m_speed;
float m_default_speed;
bool m_finished;
bool m_fading;

Expand Down
30 changes: 3 additions & 27 deletions src/supertux/textscroller_screen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ TextScrollerScreen::TextScrollerScreen(const std::string& filename) :

text_mapping.get("speed", m_defaultspeed);
text_mapping.get("music", m_music);

m_text_scroller->set_default_speed(m_defaultspeed);
}
} catch (std::exception& e) {
std::ostringstream msg;
Expand All @@ -94,33 +96,7 @@ TextScrollerScreen::setup()
void
TextScrollerScreen::update(float dt_sec, const Controller& controller)
{
if (controller.hold(Control::UP)) {
m_text_scroller->set_speed(-m_defaultspeed * 5);
} else if (controller.hold(Control::DOWN)) {
m_text_scroller->set_speed(m_defaultspeed * 5);
} else {
m_text_scroller->set_speed(m_defaultspeed);
}

if ((controller.pressed(Control::JUMP) ||
controller.pressed(Control::ACTION) ||
controller.pressed(Control::MENU_SELECT)) &&
!(controller.pressed(Control::UP))) { // prevent skipping if jump with up is enabled
m_text_scroller->scroll(SCROLL);
}

if (controller.pressed(Control::START) ||
controller.pressed(Control::ESCAPE)) {
ScreenManager::current()->pop_screen(std::make_unique<FadeToBlack>(FadeToBlack::FADEOUT, 0.5));
}

{ // close when done
if (m_text_scroller->is_finished() && !m_fading)
{
m_fading = true;
ScreenManager::current()->pop_screen(std::make_unique<FadeToBlack>(FadeToBlack::FADEOUT, 0.5));
}
}
// NOTE: Keyboard input is handled by the TextScroller class.

m_text_scroller->update(dt_sec);
}
Expand Down

0 comments on commit b7791eb

Please sign in to comment.