From 9efa4f462d69443874d49ca606751b0b6d693b0f Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke Date: Mon, 26 Apr 2004 12:19:23 +0000 Subject: [PATCH] - added way to interupt exit sequence - added primitive autowalk to worldmap SVN-Revision: 736 --- src/gameloop.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/worldmap.cpp | 44 +++++++++++++++++++++++++++++++++++++------- src/worldmap.h | 3 +++ 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/src/gameloop.cpp b/src/gameloop.cpp index 0243bfc35..cd98a863e 100644 --- a/src/gameloop.cpp +++ b/src/gameloop.cpp @@ -209,6 +209,43 @@ GameSession::process_events() tux.input.up = UP; last_x_pos = tux.base.x; + + SDL_Event event; + while (SDL_PollEvent(&event)) + { + /* Check for menu-events, if the menu is shown */ + if (Menu::current()) + { + Menu::current()->event(event); + st_pause_ticks_start(); + } + + switch(event.type) + { + case SDL_QUIT: /* Quit event - quit: */ + st_abort("Received window close", ""); + break; + + case SDL_KEYDOWN: /* A keypress! */ + { + SDLKey key = event.key.keysym.sym; + + switch(key) + { + case SDLK_ESCAPE: /* Escape: Open/Close the menu: */ + on_escape_press(); + break; + default: + break; + } + } + + case SDL_JOYBUTTONDOWN: + if (event.jbutton.button == joystick_keymap.start_button) + on_escape_press(); + break; + } + } } else { diff --git a/src/worldmap.cpp b/src/worldmap.cpp index c199abf2a..aee126f18 100644 --- a/src/worldmap.cpp +++ b/src/worldmap.cpp @@ -596,13 +596,43 @@ WorldMap::update() switch (session.run()) { case GameSession::LEVEL_FINISHED: - level->solved = true; - if (session.get_world()->get_tux()->got_coffee) - player_status.bonus = PlayerStatus::FLOWER_BONUS; - else if (session.get_world()->get_tux()->size == BIG) - player_status.bonus = PlayerStatus::GROWUP_BONUS; - else - player_status.bonus = PlayerStatus::NO_BONUS; + { + bool old_level_state = level->solved; + level->solved = true; + + if (session.get_world()->get_tux()->got_coffee) + player_status.bonus = PlayerStatus::FLOWER_BONUS; + else if (session.get_world()->get_tux()->size == BIG) + player_status.bonus = PlayerStatus::GROWUP_BONUS; + else + player_status.bonus = PlayerStatus::NO_BONUS; + + if (old_level_state != level->solved) + { // Try to detect the next direction to which we should walk + // FIXME: Mostly a hack + Direction dir = NONE; + + Tile* tile = at(tux->get_tile_pos()); + + if (tile->north && tux->back_direction != NORTH) + dir = NORTH; + else if (tile->south && tux->back_direction != SOUTH) + dir = SOUTH; + else if (tile->east && tux->back_direction != EAST) + dir = EAST; + else if (tile->west && tux->back_direction != WEST) + dir = WEST; + + if (dir != NONE) + { + tux->set_direction(dir); + tux->update(0.33f); + } + + std::cout << "Walk to dir: " << dir << std::endl; + } + } + break; case GameSession::LEVEL_ABORT: // Reseting the player_status might be a worthy diff --git a/src/worldmap.h b/src/worldmap.h index f94017fe5..2bfe8068a 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -62,6 +62,9 @@ public: /** Stop on this tile or walk over it? */ bool stop; + + /** direction in which to automatically turn when walked on such a tile */ + Direction auto_walk; }; class TileManager -- 2.11.0