830 |
// Level menu |
// Level menu |
831 |
//---------------------------------------------------------------------- |
//---------------------------------------------------------------------- |
832 |
LevelMenu::LevelMenu(LevelPack *lp, unsigned long pos) |
LevelMenu::LevelMenu(LevelPack *lp, unsigned long pos) |
833 |
: newgame (new TextButton("Start Game", this)), |
: but_back (new TextButton("Back", this)), |
834 |
back (new TextButton("Back", this)), |
but_difficulty (new DifficultyButton), |
835 |
m_nextlp (new TextButton(">", this)), |
but_levelpack (new TextButton("Level Pack", this)), |
836 |
m_prevlp (new TextButton("<", this)), |
lbl_lpinfo (new Label("")), |
837 |
m_difficulty(new DifficultyButton), |
lbl_statistics (new Label("")), |
838 |
m_lpbutton (new TextButton("Level Pack", this)), |
lbl_levelname (new Label("")), |
839 |
m_infobutton(new Label("")), |
lbl_levelinfo (new Label("")), |
|
m_levelinfo (new Label("")), |
|
|
m_levelinfo2 (new Label("")), |
|
840 |
levelwidget (new LevelWidget(lp, 4, 3)), |
levelwidget (new LevelWidget(lp, 4, 3)), |
841 |
level_pack (lp), |
level_pack (lp), |
842 |
m_ilevelpack () |
m_ilevelpack () |
852 |
pgdown = new ImageButton("ic-down", "ic-down1", this); |
pgdown = new ImageButton("ic-down", "ic-down1", this); |
853 |
start = new ImageButton("ic-top", "ic-top1", this); |
start = new ImageButton("ic-top", "ic-top1", this); |
854 |
end = new ImageButton("ic-bottom", "ic-bottom1", this); |
end = new ImageButton("ic-bottom", "ic-bottom1", this); |
855 |
unsolved = new ImageButton("ic-unsolved", "ic-unsolved1", this); |
but_unsolved = new ImageButton("ic-unsolved", "ic-unsolved1", this); |
856 |
// new TextButton("Timer on") |
// new TextButton("Timer on") |
857 |
|
|
858 |
BuildHList hlist1(this, Rect(10, Y3, BX, BY), 10); |
BuildHList hlist1(this, Rect(10, Y3, BX, BY), 10); |
859 |
|
|
860 |
hlist1.add (m_lpbutton); |
hlist1.add (but_levelpack); |
861 |
hlist1.add (unsolved); |
hlist1.add (but_unsolved); |
862 |
hlist1.add (m_difficulty); |
hlist1.add (but_difficulty); |
863 |
// hlist1.add (newgame); |
// hlist1.add (newgame); |
864 |
hlist1.add (back); |
hlist1.add (but_back); |
865 |
} |
} |
866 |
|
|
867 |
{ |
{ |
876 |
add (end, r); |
add (end, r); |
877 |
} |
} |
878 |
|
|
879 |
add (m_infobutton, Rect (325,Y2,305,28)); |
add (lbl_lpinfo, Rect (325,Y2,305,28)); |
880 |
m_infobutton->set_alignment (HALIGN_RIGHT, VALIGN_TOP); |
lbl_lpinfo->set_alignment (HALIGN_RIGHT, VALIGN_TOP); |
881 |
add (m_levelinfo, Rect (10,Y2,305, 28)); |
add (lbl_statistics, Rect (325, Y2+20, 305, 28)); |
882 |
m_levelinfo->set_alignment (HALIGN_LEFT, VALIGN_TOP); |
lbl_statistics->set_alignment (HALIGN_RIGHT, VALIGN_TOP); |
883 |
add (m_levelinfo2, Rect (10,Y2+20,305, 28)); |
|
884 |
m_levelinfo2->set_alignment (HALIGN_LEFT, VALIGN_TOP); |
add (lbl_levelname, Rect (10,Y2,305, 28)); |
885 |
// add (levelwidget, Rect (10,50,620,350)); |
lbl_levelname->set_alignment (HALIGN_LEFT, VALIGN_TOP); |
886 |
|
add (lbl_levelinfo, Rect (10,Y2+20,305, 28)); |
887 |
|
lbl_levelinfo->set_alignment (HALIGN_LEFT, VALIGN_TOP); |
888 |
|
|
889 |
add (levelwidget, Rect (10,Y1,590,350)); |
add (levelwidget, Rect (10,Y1,590,350)); |
890 |
levelwidget->set_listener(this); |
levelwidget->set_listener(this); |
891 |
|
|
925 |
void |
void |
926 |
LevelMenu::on_action(Widget *w) |
LevelMenu::on_action(Widget *w) |
927 |
{ |
{ |
928 |
if (w == newgame || w==levelwidget) { |
if (w==levelwidget) { |
929 |
int ilevel = levelwidget->selected_level(); |
int ilevel = levelwidget->selected_level(); |
930 |
|
|
931 |
LevelPack *lp = enigma::LevelPacks[m_ilevelpack]; |
LevelPack *lp = enigma::LevelPacks[m_ilevelpack]; |
937 |
} |
} |
938 |
else |
else |
939 |
show_text("You are not allowed to play this level yet."); |
show_text("You are not allowed to play this level yet."); |
940 |
} else if (w == back) { |
} else if (w == but_back) { |
941 |
Menu::quit(); |
Menu::quit(); |
942 |
} else if (w == pgup) { |
} else if (w == pgup) { |
943 |
levelwidget->page_up(); |
levelwidget->page_up(); |
947 |
levelwidget->start(); |
levelwidget->start(); |
948 |
} else if (w == end) { |
} else if (w == end) { |
949 |
levelwidget->end(); |
levelwidget->end(); |
950 |
} else if (w == unsolved) { |
} else if (w == but_unsolved) { |
951 |
levelwidget->next_unsolved(); |
levelwidget->next_unsolved(); |
952 |
} else if (w == m_prevlp) { |
} else if (w == but_levelpack) { |
|
set_levelpack (m_ilevelpack-1); |
|
|
} else if (w == m_nextlp) { |
|
|
set_levelpack (m_ilevelpack+1); |
|
|
} else if (w == m_lpbutton) { |
|
953 |
LevelPackMenu lpm; |
LevelPackMenu lpm; |
954 |
lpm.center(video::GetScreen()); |
lpm.center(video::GetScreen()); |
955 |
if (lpm.manage(video::GetScreen())) { |
if (lpm.manage(video::GetScreen())) { |
960 |
} |
} |
961 |
} |
} |
962 |
|
|
|
#define BUFFERSIZE 200 |
|
|
|
|
963 |
void |
void |
964 |
LevelMenu::update_info() |
LevelMenu::update_info() |
965 |
{ |
{ |
966 |
char txt[BUFFERSIZE]; |
char txt[200]; |
967 |
enigma::LevelPack *lp = enigma::LevelPacks[m_ilevelpack]; |
enigma::LevelPack *lp = enigma::LevelPacks[m_ilevelpack]; |
|
int iselected = levelwidget->selected_level(); |
|
968 |
|
|
969 |
if (const enigma::LevelInfo *li = lp->get_info (iselected)) { |
// Display levelpack statistics (percentage of solved levels) |
970 |
|
{ |
971 |
|
int numsolved = enigma::CountSolvedLevels (lp); |
972 |
|
int pct = 0; |
973 |
|
if (lp->size() > 0) { |
974 |
|
pct = 100*numsolved / lp->size(); |
975 |
|
} |
976 |
|
snprintf (txt, sizeof(txt), "%d%% solved", pct); |
977 |
|
lbl_statistics->set_text(txt); |
978 |
|
} |
979 |
|
|
980 |
|
int iselected = levelwidget->selected_level(); |
981 |
|
if (const enigma::LevelInfo *li = lp->get_info (iselected)) |
982 |
|
{ |
983 |
|
// Display level name |
984 |
if (options::WizardMode) { |
if (options::WizardMode) { |
985 |
snprintf (txt, sizeof(txt), "#%d: %s (%s)", |
snprintf (txt, sizeof(txt), "#%d: %s (%s)", |
986 |
iselected+1, li->name.c_str(), li->filename.c_str()); |
iselected+1, li->name.c_str(), li->filename.c_str()); |
988 |
snprintf (txt, sizeof(txt), "#%d: %s", |
snprintf (txt, sizeof(txt), "#%d: %s", |
989 |
iselected+1, li->name.c_str()); |
iselected+1, li->name.c_str()); |
990 |
} |
} |
991 |
m_levelinfo->set_text(txt); |
lbl_levelname->set_text(txt); |
|
assert(strlen(txt)<BUFFERSIZE); |
|
992 |
|
|
993 |
|
// Display best time |
994 |
if (shown_text.length()) { |
if (shown_text.length()) { |
995 |
m_levelinfo2->set_text(shown_text); |
lbl_levelinfo->set_text(shown_text); |
996 |
} |
} |
997 |
else { |
else { |
998 |
int par_time = li->best_time; |
int par_time = li->best_time; |
1008 |
snprintf (txt, sizeof(txt), "Time to beat: %d:%02d", |
snprintf (txt, sizeof(txt), "Time to beat: %d:%02d", |
1009 |
par_time/60, par_time % 60); |
par_time/60, par_time % 60); |
1010 |
|
|
1011 |
m_levelinfo2->set_text(txt); |
lbl_levelinfo->set_text(txt); |
|
assert(strlen(txt)<BUFFERSIZE); |
|
1012 |
} |
} |
1013 |
} |
} |
1014 |
} |
} |
1015 |
|
|
|
#undef BUFFERSIZE |
|
|
|
|
1016 |
void |
void |
1017 |
LevelMenu::set_levelpack (unsigned index) |
LevelMenu::set_levelpack (unsigned index) |
1018 |
{ |
{ |
1025 |
char txt[100]; |
char txt[100]; |
1026 |
snprintf (txt, sizeof(txt), "%s: %d levels", |
snprintf (txt, sizeof(txt), "%s: %d levels", |
1027 |
lp->get_name().c_str(), lp->size()); |
lp->get_name().c_str(), lp->size()); |
1028 |
m_infobutton->set_text(txt); |
lbl_lpinfo->set_text(txt); |
1029 |
|
|
1030 |
update_info(); |
update_info(); |
1031 |
} |
} |