/[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.16 by reallysoft, Fri Apr 25 18:35:59 2003 UTC revision 1.17 by reallysoft, Sun Apr 27 08:53:21 2003 UTC
# Line 113  namespace Line 113  namespace
113          void show_menu();          void show_menu();
114          void show_help();          void show_help();
115          bool load_level(int ilevel);          bool load_level(int ilevel);
116          void advance_level();          void advance_level(int mode = 0);
117    
118          // Private variables.          // Private variables.
119          State       state;          State       state;
# Line 217  LevelPack_Enigma::reinit() Line 217  LevelPack_Enigma::reinit()
217      vector<string> tokens;      vector<string> tokens;
218      while (getline(is, line)) {      while (getline(is, line)) {
219          split_copy(line, '|', back_inserter(tokens));          split_copy(line, '|', back_inserter(tokens));
220          transform(tokens.begin(), tokens.end(),          transform(tokens.begin(), tokens.end(), tokens.begin(), trim<string>);
221                    tokens.begin(), trim<string>);  
222          if (tokens.size() == 2)          size_t num_tokens = tokens.size();
223              m_levels.push_back(LevelInfo(tokens[0], tokens[1], ""));          if (num_tokens>0 && tokens[0].length()>0) {
224                switch (num_tokens) {
225                    case 1:         // level name only
226                        m_levels.push_back(LevelInfo(tokens[0], "", ""));
227                        break;
228                    case 2:         // level name + long name
229                        m_levels.push_back(LevelInfo(tokens[0], tokens[1], ""));
230                        break;
231                    case 3:         // level name + long name + author
232                        m_levels.push_back(LevelInfo(tokens[0], tokens[1], tokens[2]));
233                        break;
234                }
235            }
236    
237          tokens.clear();          tokens.clear();
238      }      }
239  }  }
# Line 305  Game::change_state(State newstate) Line 318  Game::change_state(State newstate)
318  }  }
319    
320  void  void
321  Game::advance_level()  Game::advance_level(int mode)
322        // mode == 0 -> advance according to options::SkipSolvedLevels
323        // mode == 1 -> advance to next level
324        // mode == 2 -> advance to next unsolved level
325    
326  {  {
327      unsigned next_level = icurrent_level;      unsigned next_level  = icurrent_level;
328        bool     skip_solved = mode == 2 || (mode == 0 && options::SkipSolvedLevels);
329    
330    try_next:    try_next:
331      next_level++;      next_level++;
# Line 322  Game::advance_level() Line 340  Game::advance_level()
340          if (info->filename == "todo")          if (info->filename == "todo")
341              goto try_next;     // Skip todo levels              goto try_next;     // Skip todo levels
342    
343          if (options::SkipSolvedLevels && ls && ls->finished)          if (skip_solved && ls && ls->finished)
344              goto try_next;      // Skip solved level              goto try_next;      // Skip solved level
345    
346          // this level is ok.          // this level is ok.
# Line 330  Game::advance_level() Line 348  Game::advance_level()
348      }      }
349  }  }
350    
351    static string displayedLevelInfo(LevelInfo *info) {
352        string displayed;
353    
354        if (info->name.empty()) displayed = "Another nameless level";
355        else                    displayed = string("\"")+info->name+"\"";
356    
357        if (!info->author.empty()) displayed += "  by "+info->author;
358    
359        return displayed;
360    }
361    
362  void  void
363  Game::tick(double dtime)  Game::tick(double dtime)
364  {  {
# Line 375  Game::tick(double dtime) Line 404  Game::tick(double dtime)
404    
405      case LEVELINFO: {      case LEVELINFO: {
406          // show level information (name, author, etc.)          // show level information (name, author, etc.)
407          LevelInfo *info = level_pack->get_info(icurrent_level);          string disp = displayedLevelInfo(level_pack->get_info(icurrent_level));
408          int        len  = info->name.length()+6+info->author.length()+1;          display::GetStatusBar()->show_text(disp.c_str(), display::TEXT_5SECONDS);
         char      *buf  = new char[len];  
   
         if (info->author.empty()) sprintf(buf, "\"%s\"", info->name.c_str());  
         else sprintf(buf, "\"%s\" by %s", info->name.c_str(), info->author.c_str());  
   
         display::GetStatusBar()->show_text(buf);  
         free(buf);  
   
409          change_state(LEVELINIT);          change_state(LEVELINIT);
410          break;          break;
411      }      }
# Line 628  Game::on_keydown(SDL_Event &e) Line 649  Game::on_keydown(SDL_Event &e)
649          break;          break;
650    
651      case SDLK_F4:      case SDLK_F4:
652          advance_level();          advance_level(1); // next level (ignores options::SkipSolvedLevels)
653          break;          break;
654    
655      case SDLK_F5:      case SDLK_F5:
656          {          advance_level(2); // next unsolved level
             bool oldSkip = options::SkipSolvedLevels;  
             options::SkipSolvedLevels = true;  
             advance_level();  
             options::SkipSolvedLevels = oldSkip;  
         }  
657          break;          break;
658    
659      case SDLK_F10:      case SDLK_F10:
660          {          {
661              string fname = level_pack->get_info(icurrent_level)->filename + ".bmp";              string fname = level_pack->get_info(icurrent_level)->filename + ".bmp";

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

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