pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r4145 - branches/pingus-hanusz/src


From: grumbel
Subject: [Pingus-CVS] r4145 - branches/pingus-hanusz/src
Date: Thu, 12 May 2011 18:23:53 +0200

Author: grumbel
Date: 2011-05-12 18:23:53 +0200 (Thu, 12 May 2011)
New Revision: 4145

Modified:
   branches/pingus-hanusz/src/level_menu.cpp
   branches/pingus-hanusz/src/level_menu.hpp
Log:
Added TimeOut message and proper time limit


Modified: branches/pingus-hanusz/src/level_menu.cpp
===================================================================
--- branches/pingus-hanusz/src/level_menu.cpp   2011-05-12 16:22:49 UTC (rev 
4144)
+++ branches/pingus-hanusz/src/level_menu.cpp   2011-05-12 16:23:53 UTC (rev 
4145)
@@ -34,6 +34,8 @@
 #include "globals.hpp"
 #include "gui/surface_button.hpp"
 #include "sound/sound.hpp"
+#include "string_util.hpp"
+#include "statistics.hpp"
 
 class LevelMenuAbortButton
   : public GUI::SurfaceButton
@@ -258,7 +260,9 @@
 LevelMenu::LevelMenu() :
   start_time(SDL_GetTicks()),
   x_pos((Display::get_width()  - 800)/2),
-  y_pos((Display::get_height() - 600)/2)
+  y_pos((Display::get_height() - 600)/2),
+  m_time_limit(15),
+  m_mode(kLevelsetSelector)
 {
   //background = Resource::load_sprite("core/menu/filedialog");
   background = Resource::load_sprite("core/menu/startscreenbg");
@@ -276,7 +280,7 @@
   gui_manager->add(level_selector,    true);
   gui_manager->add(m_username_inputbox,    true);
   gui_manager->add(m_time_inputbox,    true);
-  gui_manager->add(new LevelMenuAbortButton(this), true);
+  gui_manager->add(m_abort_button = new LevelMenuAbortButton(this), true);
 
   level_selector->hide();
 }
@@ -290,17 +294,30 @@
 {
   gc.draw(background, Vector2i(gc.get_width()/2, gc.get_height()/2));
 
-  if (level_selector->is_visible())
+  if (m_mode == kLevelSelector)
   {
-    int total_time = 15 * 60;
+    int total_time = m_time_limit;
     int sec = total_time - ((SDL_GetTicks() - start_time) / 1000);
-    int min = sec / 60;
-    sec = sec % 60;
 
-    gc.print_center(Fonts::chalk_small, gc.get_width()/2, gc.get_height()/2 + 
180, 
-                    (boost::format("%2d:%02d") % min % sec).str());
+    if (sec <= 0)
+    {
+      // time limit reached
+      gc.print_center(Fonts::chalk_large, gc.get_width()/2, gc.get_height()/2 
- 60,
+                      "Time Out");
+      
+      m_abort_button->show();
+      level_selector->hide();
+    }
+    else
+    {
+      int min = sec / 60;
+      sec = sec % 60;
+
+      gc.print_center(Fonts::chalk_small, gc.get_width()/2, gc.get_height()/2 
+ 180, 
+                      (boost::format("%2d:%02d") % min % sec).str());
+    }
   }
-  else
+  else if (m_mode == kLevelsetSelector)
   {
     gc.print_right(Fonts::chalk_small, gc.get_width()/2 - 160, 
gc.get_height()/2, 
                    "Username:");
@@ -312,51 +329,69 @@
   SDL_Delay(10);
 }
 
+
 void
+LevelMenu::update (float)
+{
+}
+
+void
 LevelMenu::on_escape_press()
 {
-  if (level_selector->is_visible())
-    {
-      levelset_selector->show();
-
-      m_username_inputbox->show();
-      m_username_inputbox->set_string("");
-      m_time_inputbox->show();
-
-      level_selector->hide();           
-    }
+  if (m_mode == kLevelSelector)
+  {
+    set_levelset(0);
+  }
   else
-    {
-      //std::cout << "OptionMenu: poping screen" << std::endl;
-      ScreenManager::instance()->pop_screen();
-    }
+  {
+    //std::cout << "OptionMenu: poping screen" << std::endl;
+    ScreenManager::instance()->pop_screen();
+  }
 }
 
 void
 LevelMenu::set_levelset(Levelset* levelset)
 {
-  if (!m_username_inputbox->get_string().empty())
+  if (levelset)
   {
-  if (levelset)
+    m_mode = kLevelSelector;
+
+    if (!m_username_inputbox->get_string().empty())
     {
-      level_selector->set_levelset(levelset);
-      levelset_selector->hide();
-      level_selector->show();
+      Statistics::instance()->set_username(m_username_inputbox->get_string());
 
-      m_username_inputbox->hide();
-      m_time_inputbox->hide();
+      if (!StringUtil::from_string(m_time_inputbox->get_string(), 
m_time_limit))
+      {
+        m_time_inputbox->set_string("err");
+      }
+      else
+      {
+        //FIXME:m_time_limit *= 60;
 
-      start_time = SDL_GetTicks();
+        level_selector->set_levelset(levelset);
+        levelset_selector->hide();
+        m_abort_button->hide();
+
+        level_selector->show();
+
+        m_username_inputbox->hide();
+        m_time_inputbox->hide();
+
+        start_time = SDL_GetTicks();
+      }
     }
+  }
   else
-    {
-      levelset_selector->show();
-      level_selector->hide();   
+  {
+    m_mode = kLevelsetSelector;
 
-      m_username_inputbox->show();
-      m_username_inputbox->set_string("");
-      m_time_inputbox->show(); 
-    }
+    levelset_selector->show();
+    level_selector->hide();   
+    m_abort_button->show();
+
+    m_username_inputbox->show();
+    m_username_inputbox->set_string("");
+    m_time_inputbox->show(); 
   }
 }
 

Modified: branches/pingus-hanusz/src/level_menu.hpp
===================================================================
--- branches/pingus-hanusz/src/level_menu.hpp   2011-05-12 16:22:49 UTC (rev 
4144)
+++ branches/pingus-hanusz/src/level_menu.hpp   2011-05-12 16:23:53 UTC (rev 
4145)
@@ -27,6 +27,7 @@
 
 class LevelSelector;
 class LevelsetSelector;
+class LevelMenuAbortButton;
 
 /** */
 class LevelMenu : public GUIScreen
@@ -41,9 +42,14 @@
 
   LevelSelector* level_selector;
   LevelsetSelector* levelset_selector;
+  LevelMenuAbortButton* m_abort_button;
   GUI::InputBox* m_username_inputbox;
   GUI::InputBox* m_time_inputbox;
 
+  int m_time_limit;
+
+  enum { kLevelsetSelector, kLevelSelector} m_mode;
+
 public:
   LevelMenu();
   ~LevelMenu();
@@ -51,6 +57,8 @@
   void draw_background (DrawingContext& gc);
   void on_escape_press ();
   
+  void update (float);
+
   void set_levelset(Levelset* levelset);
 
 private:




reply via email to

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