]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Menu/Menu.cpp
Console: Return gracefully when loading missing level
[lugaru.git] / Source / Menu / Menu.cpp
index 7d8bce8dfdac5b83c44ff0aa1784c0f8f93c2961..91dd2ed7efa6c0336062989809d964ccb38c5691 100644 (file)
@@ -49,6 +49,10 @@ extern int leveltheme;
 extern void toggleFullscreen();
 
 int entername = 0;
+std::string newusername = "";
+unsigned newuserselected = 0;
+float newuserblinkdelay = 0;
+bool newuserblink = false;
 
 std::vector<MenuItem> Menu::items;
 
@@ -141,7 +145,7 @@ void Menu::setText(int id, const string& text, int x, int y, int w, int h)
 
 int Menu::getSelected(int mousex, int mousey)
 {
-    for (vector<MenuItem>::iterator it = items.begin(); it != items.end(); it++)
+    for (vector<MenuItem>::reverse_iterator it = items.rbegin(); it != items.rend(); it++)
         if (it->type == MenuItem::BUTTON || it->type == MenuItem::IMAGEBUTTON || it->type == MenuItem::MAPMARKER) {
             int mx = mousex;
             int my = mousey;
@@ -239,7 +243,7 @@ void Menu::drawItems()
             }
             break;
         case MenuItem::MAPLABEL:
-            Game::text->glPrintOutlined(0.9, 0, 0, it->x, it->y, it->text.c_str(), 0, 0.6, 640, 480);
+            Game::text->glPrintOutlined(0.9, 0, 0, 1, it->x, it->y, it->text.c_str(), 0, 0.6, 640, 480);
             break;
         case MenuItem::MAPLINE: {
             XYZ linestart;
@@ -296,7 +300,7 @@ void Menu::updateSettingsMenu()
     if (bloodtoggle == 1) setText(2, "Blood: On, low detail");
     if (bloodtoggle == 2) setText(2, "Blood: On, high detail (slower)");
     setText(4, ismotionblur ? "Blur Effects: Enabled (less compatible)" : "Blur Effects: Disabled (more compatible)");
-    setText(5, decals ? "Decals: Enabled (slower)" : "Decals: Disabled");
+    setText(5, decalstoggle ? "Decals: Enabled (slower)" : "Decals: Disabled");
     setText(6, musictoggle ? "Music: Enabled" : "Music: Disabled");
     setText(9, invertmouse ? "Invert mouse: Yes" : "Invert mouse: No");
     setText(10, std::string("Mouse Speed: ") + to_string(int(usermousesensitivity * 5)));
@@ -539,7 +543,7 @@ void Menu::Tick()
     }
     if (mainmenu == 10)
         endgame = 2;
-    if (mainmenu == 18 && Input::isKeyPressed(MOUSEBUTTON2) && selected == 1) {
+    if (mainmenu == 18 && Input::isKeyPressed(MOUSEBUTTON_RIGHT) && selected == 1) {
         stereoseparation -= 0.001;
         updateStereoConfigMenu();
     }
@@ -622,7 +626,7 @@ void Menu::Tick()
                 ismotionblur = !ismotionblur;
                 break;
             case 5:
-                decals = !decals;
+                decalstoggle = !decalstoggle;
                 break;
             case 6:
                 musictoggle = !musictoggle;
@@ -702,15 +706,16 @@ void Menu::Tick()
                 loading = 2;
                 loadtime = 0;
                 targetlevel = 7;
-                if (firstload)
+                if (firstLoadDone) {
                     TickOnceAfter();
-                else
+                } else {
                     LoadStuff();
+                }
                 whichchoice = selected - NB_CAMPAIGN_MENU_ITEM - Account::active().getCampaignChoicesMade();
                 actuallevel = (Account::active().getCampaignChoicesMade() > 0 ? campaignlevels[Account::active().getCampaignChoicesMade() - 1].nextlevel[whichchoice] : 0);
-                visibleloading = 1;
+                visibleloading = true;
                 stillloading = 1;
-                Loadlevel(campaignlevels[actuallevel].mapname.c_str());
+                LoadLevel(campaignlevels[actuallevel].mapname.c_str());
                 campaign = 1;
                 mainmenu = 0;
                 gameon = 1;
@@ -723,11 +728,12 @@ void Menu::Tick()
                 loading = 2;
                 loadtime = 0;
                 targetlevel = -1;
-                if (firstload) {
+                if (firstLoadDone) {
                     TickOnceAfter();
-                } else
+                } else {
                     LoadStuff();
-                Loadlevel(-1);
+                }
+                LoadLevel(-1);
 
                 mainmenu = 0;
                 gameon = 1;
@@ -787,8 +793,8 @@ void Menu::Tick()
                 } else {
                     mainmenu = 1;
                 }
-                displaytext[0].clear();
-                displayselected = 0;
+                newusername.clear();
+                newuserselected = 0;
                 entername = 0;
             }
             break;
@@ -809,11 +815,12 @@ void Menu::Tick()
                 loading = 2;
                 loadtime = 0;
                 targetlevel = selected;
-                if (firstload)
+                if (firstLoadDone) {
                     TickOnceAfter();
-                else
+                } else {
                     LoadStuff();
-                Loadlevel(selected);
+                }
+                LoadLevel(selected);
                 campaign = 0;
 
                 mainmenu = 0;
@@ -864,10 +871,10 @@ void Menu::Tick()
     OPENAL_SetFrequency(channels[stream_menutheme]);
 
     if (entername) {
-        inputText(displaytext[0], &displayselected);
+        inputText(newusername, &newuserselected);
         if (!waiting) { // the input as finished
-            if (!displaytext[0].empty()) { // with enter
-                Account::add(string(displaytext[0]));
+            if (!newusername.empty()) { // with enter
+                Account::add(string(newusername));
 
                 mainmenu = 8;
 
@@ -875,24 +882,24 @@ void Menu::Tick()
 
                 fireSound(firestartsound);
 
-                displaytext[0].clear();
+                newusername.clear();
 
-                displayselected = 0;
+                newuserselected = 0;
             }
             entername = 0;
             Load();
         }
 
-        displayblinkdelay -= multiplier;
-        if (displayblinkdelay <= 0) {
-            displayblinkdelay = .3;
-            displayblink = !displayblink;
+        newuserblinkdelay -= multiplier;
+        if (newuserblinkdelay <= 0) {
+            newuserblinkdelay = .3;
+            newuserblink = !newuserblink;
         }
     }
 
     if (entername) {
-        setText(0, displaytext[0], 20, 400, -1, -1);
-        setText(-2, displayblink ? "_" : "", 20 + displayselected * 10, 400, -1, -1);
+        setText(0, newusername, 20, 400, -1, -1);
+        setText(-2, newuserblink ? "_" : "", 20 + newuserselected * 10, 400, -1, -1);
     }
 
     if (oldmainmenu != mainmenu)
@@ -901,7 +908,7 @@ void Menu::Tick()
 
 }
 
-int setKeySelected_thread(void* data)
+int setKeySelected_thread(void*)
 {
     using namespace Game;
     int scancode = -1;