- added way to interupt exit sequence
authorIngo Ruhnke <grumbel@gmx.de>
Mon, 26 Apr 2004 12:19:23 +0000 (12:19 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Mon, 26 Apr 2004 12:19:23 +0000 (12:19 +0000)
- added primitive autowalk to worldmap

SVN-Revision: 736

src/gameloop.cpp
src/worldmap.cpp
src/worldmap.h

index 0243bfc..cd98a86 100644 (file)
@@ -209,6 +209,43 @@ GameSession::process_events()
         tux.input.up    = UP; 
 
       last_x_pos = tux.base.x;
         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
     {
     }
   else
     {
index c199abf..aee126f 100644 (file)
@@ -596,13 +596,43 @@ WorldMap::update()
               switch (session.run())
                 {
                 case GameSession::LEVEL_FINISHED:
               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
                   break;
                 case GameSession::LEVEL_ABORT:
                   // Reseting the player_status might be a worthy
index f94017f..2bfe806 100644 (file)
@@ -62,6 +62,9 @@ public:
 
   /** Stop on this tile or walk over it? */
   bool stop;
 
   /** 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
 };
 
 class TileManager