enigma-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Enigma-cvs] enigma/src menus.cc,1.71,1.72


From: Ralf Westram <address@hidden>
Subject: [Enigma-cvs] enigma/src menus.cc,1.71,1.72
Date: Mon, 03 Nov 2003 14:21:19 +0000

Update of /cvsroot/enigma/enigma/src
In directory subversions:/tmp/cvs-serv26907

Modified Files:
        menus.cc 
Log Message:
- if level doesn't differ between easy and hard
  . displays lowest 'best_time'
  . shade level if completed in any difficulty setting
  . display medal of current difficulty setting
- displays par_time and best_user_time
- mark levels where par_time has been reached



Index: menus.cc
===================================================================
RCS file: /cvsroot/enigma/enigma/src/menus.cc,v
retrieving revision 1.71
retrieving revision 1.72
diff -C2 -d -r1.71 -r1.72
*** menus.cc    30 Oct 2003 19:07:38 -0000      1.71
--- menus.cc    3 Nov 2003 14:21:16 -0000       1.72
***************
*** 159,162 ****
--- 159,185 ----
  }
  
+ namespace {
+     void get_best_times(const LevelInfo *li, const LevelStatus *ls, int& 
best_par_time, int& best_user_time) {
+         assert(li);
+ 
+         best_par_time  = options::Difficulty == DIFFICULTY_HARD ? 
li->best_time_easy : li->best_time_normal;
+         best_user_time = -1;
+ 
+         if (ls) {
+             if (li->has_easymode) {
+                 if ((ls->finished&options::Difficulty)>0 && ls->time_hard>0)
+                     best_user_time = ls->time_hard;
+             }
+             else {
+                 if (ls->finished) {
+                     if (ls->time_hard > 0) best_user_time = ls->time_hard;
+                     if (ls->time_easy > 0 && (ls->time_easy<best_user_time || 
best_user_time<0))
+                         best_user_time = ls->time_easy;
+                 }
+             }
+         }
+     }
+ }
+ 
  void
  LevelWidget::draw (px::GC &gc, const px::Rect &r)
***************
*** 181,184 ****
--- 204,208 ----
      Surface *img_solved      = enigma::GetImage("solved");
      Surface *img_unknown     = enigma::GetImage("unknown");
+     Surface *img_par         = enigma::GetImage("par");
  
      unsigned i=ifirst;          // level index
***************
*** 224,231 ****
              int  finished      = 0;
              bool level_changed = false;
              if (LevelStatus *ls = GetLevelStatus(level_pack->get_name(), 
levelinfo->filename)) {
                  finished = ls->finished;
!                 if (finished)
                      level_changed = level_pack->get_revision_number(i) > 
ls->solved_revision;
              }
  
--- 248,262 ----
              int  finished      = 0;
              bool level_changed = false;
+             bool par_reached   = false;
+ 
              if (LevelStatus *ls = GetLevelStatus(level_pack->get_name(), 
levelinfo->filename)) {
                  finished = ls->finished;
!                 if (finished) {
                      level_changed = level_pack->get_revision_number(i) > 
ls->solved_revision;
+ 
+                     int best_par_time, best_user_time;
+                     get_best_times(levelinfo, ls, best_par_time, 
best_user_time);
+                     par_reached = best_user_time>0 && best_user_time <= 
best_par_time;
+                 }
              }
  
***************
*** 234,238 ****
              if (img) {
                  blit (gc, imgx, imgy, img);
!                 if (finished >= options::Difficulty) {
                      blit (gc, imgx, imgy, img_solved); // Shade completed 
levels
                  }
--- 265,269 ----
              if (img) {
                  blit (gc, imgx, imgy, img);
!                 if (finished >= options::Difficulty || (finished > 0 && 
!levelinfo->has_easymode)) {
                      blit (gc, imgx, imgy, img_solved); // Shade completed 
levels
                  }
***************
*** 247,251 ****
              // Draw solved/changed icons on top of level preview
              if (finished)
!                 blit (gc, imgx, imgy, (finished&DIFFICULTY_HARD) ? img_hard : 
img_easy);
  
              // Add warning sign if level has been changed since player solved 
it
--- 278,285 ----
              // Draw solved/changed icons on top of level preview
              if (finished)
!                 blit (gc, imgx, imgy,
!                       levelinfo->has_easymode
!                       ? ((finished&DIFFICULTY_HARD) ? img_hard : img_easy )
!                       : (options::Difficulty == DIFFICULTY_HARD ? img_hard : 
img_easy));
  
              // Add warning sign if level has been changed since player solved 
it
***************
*** 253,256 ****
--- 287,294 ----
                  blit (gc, imgx-3, imgy-3, img_changed);
  
+             // Add time icon if par has been reached
+             if (par_reached)
+                 blit(gc, imgx+30, imgy+12, img_par);
+ 
              // Draw level name
              const char *caption = levelinfo->name.c_str();
***************
*** 907,922 ****
          }
          else {
!             int best_time = li->best_time;
!             if (LevelStatus *ls= options::GetLevelStatus (lp->get_name(), 
li->filename)) {
!                 if (options::Difficulty == DIFFICULTY_HARD) {
!                     if (ls->time_hard > 0)
!                         best_time = ls->time_hard;
!                 } else {
!                     if (ls->time_easy > 0)
!                         best_time = ls->time_easy;
                  }
              }
!             snprintf (txt, sizeof(txt), "Time to beat: %d:%02d",
!                       best_time/60, best_time % 60);
  
              lbl_levelinfo->set_text(txt);
--- 945,966 ----
          }
          else {
!             int best_par_time, best_user_time;
!             get_best_times(li, options::GetLevelStatus (lp->get_name(), 
li->filename), best_par_time, best_user_time);
! 
!             if (best_user_time>0) {
!                 if (best_user_time <= best_par_time) {
!                     snprintf (txt, sizeof(txt), "Your time: %d:%02d",
!                               best_user_time/60, best_user_time % 60);
!                 }
!                 else {
!                     snprintf (txt, sizeof(txt), "Time to beat: %d:%02d  Your 
time: %d:%02d",
!                               best_par_time/60, best_par_time % 60,
!                               best_user_time/60, best_user_time % 60);
                  }
              }
!             else {
!                 snprintf (txt, sizeof(txt), "Time to beat: %d:%02d",
!                           best_par_time/60, best_par_time % 60);
!             }
  
              lbl_levelinfo->set_text(txt);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]