/[enigma]/enigma/src/game.cc
ViewVC logotype

Diff of /enigma/src/game.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.10 by reallysoft, Sat Mar 29 01:25:13 2003 UTC revision 1.11 by reallysoft, Sat Mar 29 17:03:37 2003 UTC
# Line 98  namespace Line 98  namespace
98      private:      private:
99          // Private types.          // Private types.
100          enum State {          enum State {
101                LEVELINIT,          // initialize level
102              INGAME,             // game is currently running              INGAME,             // game is currently running
103              LEVELFINISHED,      // level finished; proceed to next one              LEVELFINISHED,      // level finished; proceed to next one
104              PLAYERDEAD,         // player is dead; restart level shortly              PLAYERDEAD,         // player is dead; restart level shortly
105              NOMORELIVES,        // no player has any lives left, restart              NOMORELIVES,        // no player has any lives left, restart
106              RESTARTGAME,        // restart the current (new lives)              RESTARTGAME,        // restart the current (new lives)
107              RELOADLEVEL,      // reload current level (resets objects)              RELOADLEVEL,        // reload current level (resets objects)
108              LEVELINFO,          // display level info              LEVELINFO,          // display level info
109              ABORT               // quit the game immediately              ABORT               // quit the game immediately
110          };          };
111    
112    
113          // Private methods.          // Private methods.
114          void handle_events();          void handle_events();
115          void on_keydown(SDL_Event &e);          void on_keydown(SDL_Event &e);
# Line 410  Game::advance_level() Line 412  Game::advance_level()
412              goto try_next;      // Skip solved level              goto try_next;      // Skip solved level
413    
414          // this level is ok.          // this level is ok.
415          load_level(next_level);          change_state(load_level(next_level) ? LEVELINFO : ABORT);
         change_state(LEVELINFO);  
416      }      }
417  }  }
418    
# Line 422  Game::tick(double dtime) Line 423  Game::tick(double dtime)
423      switch (state) {      switch (state) {
424      case RESTARTGAME:      case RESTARTGAME:
425          player::NewGame(2);         // two virtual players          player::NewGame(2);         // two virtual players
426          if( ! load_level(icurrent_level)) {          change_state(load_level(icurrent_level) ? LEVELINIT : ABORT);
             change_state(ABORT);  
         } else  
             change_state(INGAME);  
427          break;          break;
428    
429      case PLAYERDEAD:      case PLAYERDEAD:
# Line 449  Game::tick(double dtime) Line 447  Game::tick(double dtime)
447    
448      case RELOADLEVEL:      case RELOADLEVEL:
449          if (current_state_dtime >= 1.0) {          if (current_state_dtime >= 1.0) {
450              load_level(icurrent_level);              change_state(load_level(icurrent_level) ? LEVELINIT : ABORT);
             change_state(INGAME);  
451          } else {          } else {
452              world::Tick(dtime);              world::Tick(dtime);
453              display::Tick(dtime);              display::Tick(dtime);
# Line 459  Game::tick(double dtime) Line 456  Game::tick(double dtime)
456          }          }
457          break;          break;
458    
459      case LEVELINFO:      case LEVELINFO: {
460          // TODO: show level information (name, author, etc.)          // TODO: show level information (name, author, etc.)
461          change_state(INGAME);  
462            change_state(LEVELINIT);
463          break;          break;
464        }
465        case LEVELINIT:  {
466            const int  BUFSIZE = 50;
467            LevelInfo *info    = level_pack->get_info(icurrent_level);
468            char       buffer[BUFSIZE+1];
469    
470            snprintf(buffer, BUFSIZE, "Enigma - %s ", info->name.c_str());
471            video::SetCaption(buffer);
472    
473            change_state(INGAME);
474            break;
475        }
476      case LEVELFINISHED:      case LEVELFINISHED:
477          if (current_state_dtime <= 2.5) {          if (current_state_dtime <= 2.5) {
478              handle_events();              handle_events();
# Line 699  Game::on_keydown(SDL_Event &e) Line 708  Game::on_keydown(SDL_Event &e)
708              options::ShowFPS = !options::ShowFPS;              options::ShowFPS = !options::ShowFPS;
709              break;              break;
710          case SDLK_l:          case SDLK_l:
711              load_level(icurrent_level);              change_state(load_level(icurrent_level) ? LEVELINIT : ABORT);
712              break;              break;
713          case SDLK_t:          case SDLK_t:
714              // Darken the current screen; useful for debugging screen updates              // Darken the current screen; useful for debugging screen updates
# Line 710  Game::on_keydown(SDL_Event &e) Line 719  Game::on_keydown(SDL_Event &e)
719          case SDLK_g:          case SDLK_g:
720              if (e.key.keysym.mod & KMOD_ALT) {              if (e.key.keysym.mod & KMOD_ALT) {
721                  display::ReloadModels();                  display::ReloadModels();
722                  load_level(icurrent_level);                  change_state(load_level(icurrent_level) ? LEVELINIT : ABORT);
723              }              }
724              break;              break;
725          case SDLK_1: ToggleFlag(display::SHOW_FLOOR); break;          case SDLK_1: ToggleFlag(display::SHOW_FLOOR); break;

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.11

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26