[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Enigma-cvs] enigma/src menus.cc,1.71,1.72,
Ralf Westram <address@hidden> <=