pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r3342 - trunk/pingus/src


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3342 - trunk/pingus/src
Date: Sat, 27 Oct 2007 11:31:13 +0200

Author: grumbel
Date: 2007-10-27 11:31:13 +0200 (Sat, 27 Oct 2007)
New Revision: 3342

Modified:
   trunk/pingus/src/level_menu.cpp
   trunk/pingus/src/level_menu.hpp
Log:
- more level menu stuff

Modified: trunk/pingus/src/level_menu.cpp
===================================================================
--- trunk/pingus/src/level_menu.cpp     2007-10-27 07:26:45 UTC (rev 3341)
+++ trunk/pingus/src/level_menu.cpp     2007-10-27 09:31:13 UTC (rev 3342)
@@ -27,42 +27,181 @@
 #include "system.hpp"
 #include "display/display.hpp"
 #include "level_menu.hpp"
+#include "gui/rect_component.hpp"
+#include "gui/gui_manager.hpp"
 
+class LevelsetSelector : public GUI::RectComponent
+{
+private:
+  LevelMenu* level_menu;
+  typedef std::vector<Levelset*> Levelsets;
+  Levelsets levelsets;
+  Levelset* current_levelset;
+  Sprite marker;
+
+public:
+  LevelsetSelector(LevelMenu* level_menu_, const Rect& rect_) 
+    : RectComponent(rect_),
+      level_menu(level_menu_)
+  {
+    marker        = Resource::load_sprite("core/menu/marker");
+
+    std::string path = Pathname("levelsets", 
Pathname::DATA_PATH).get_sys_path();
+    System::Directory directory = System::opendir(path, "*.levelset");
+    for(System::Directory::iterator i = directory.begin(); i != 
directory.end(); ++i)
+      {
+        levelsets.push_back(new Levelset(Pathname(path + "/" + i->name, 
Pathname::SYSTEM_PATH)));
+      }
+  }
+
+  ~LevelsetSelector() 
+  {
+    for(Levelsets::iterator i = levelsets.begin(); i != levelsets.end(); ++i)
+      {
+        delete *i;
+      }
+  }
+  
+  void draw(DrawingContext& gc)
+  {
+    gc.print_center(Fonts::chalk_large, 800/2, 90, _("Levelset Menu"));
+
+    gc.push_modelview();
+    gc.translate(rect.left, rect.top);
+
+    //gc.draw_fillrect(Rect(Vector2i(0,0), Size(rect.get_width(), 
rect.get_height())),
+    //                 Color(255, 255, 0, 100));
+
+    int y = 0;
+    for(Levelsets::iterator i = levelsets.begin(); i != levelsets.end(); ++i)
+      {
+        if (*i == current_levelset)
+          gc.draw(marker, 0, y - 5);
+
+        gc.print_left(Fonts::chalk_normal, 30, 15 + y, (*i)->get_title());
+        gc.print_left(Fonts::chalk_small,  50, 40 + y, 
(*i)->get_description());
+
+        gc.print_right(Fonts::chalk_normal, rect.get_width() - 30, 15 + y, 
(boost::format("Completion: %1%%%") % (*i)->get_completion()).str());
+        gc.print_right(Fonts::chalk_small,  rect.get_width() - 30, 60 + y, 
(boost::format("%1% levels") % (*i)->get_level_count()).str());
+
+        //gc.draw(ok_button, 620, y);
+
+        y += 75;
+      }
+    gc.pop_modelview();
+  }
+
+  void on_pointer_move(int x, int y)
+  {
+    x -= rect.left;
+    y -= rect.top;
+
+    if (!levelsets.empty())
+      {
+        int i = y / 75;
+
+        if (i >= 0 && i < 4)
+          current_levelset = levelsets[i];
+        else
+          i = 0;
+      }
+  }
+
+  void on_primary_button_press (int x, int y)
+  {
+    if (current_levelset)
+      {
+        level_menu->set_levelset(current_levelset);
+      }
+  }
+
+  void update_layout() {}
+};
+
+class LevelSelector : public GUI::RectComponent
+{
+private:
+  LevelMenu* level_menu;
+  Sprite marker;
+  Sprite marker_locked;
+  Levelset* levelset;
+
+public:
+  LevelSelector(LevelMenu* level_menu_, const Rect& rect_) 
+    : RectComponent(rect_),
+      level_menu(level_menu_),
+      levelset(0)
+  {
+    marker        = Resource::load_sprite("core/menu/marker2");
+    marker_locked = Resource::load_sprite("core/menu/marker_locked");
+  }
+
+  void draw(DrawingContext& gc) 
+  {
+    if (levelset)
+      {
+        gc.print_center(Fonts::chalk_large, 800/2, 90, 
_(levelset->get_title()));
+
+        gc.print_left(Fonts::chalk_normal,  120, 145, "Levelname");
+        gc.print_right(Fonts::chalk_normal, 660, 145, "Completed");
+        int y = 185;
+        for(int i = 0; i < levelset->get_level_count(); ++i)
+          {
+            if (i == 0)
+              gc.draw(marker, 100, y-4);
+            else if (i > 3)
+              gc.draw(marker_locked, 100, y-4);
+
+            std::string level = levelset->get_level(i);          
+            gc.print_left(Fonts::chalk_small, 120, y, level);
+            gc.print_right(Fonts::chalk_small, 660, y, "[x]");
+            y += 32;
+          }
+      }
+  }
+
+  void set_levelset(Levelset* levelset_)
+  {
+    levelset = levelset_;
+  }
+
+  void on_pointer_move(int x, int y)
+  {
+    x -= rect.left;
+    y -= rect.top;
+
+    std::cout << x << " " << y << std::endl;
+  }
+
+  void on_primary_button_press (int x, int y)
+  {
+    level_menu->set_levelset(0);
+  }
+
+  void update_layout() {}
+};
+
 LevelMenu::LevelMenu()
   : x_pos((Display::get_width()  - 800)/2),
-    y_pos((Display::get_height() - 600)/2),
-    current_levelset(0)
+    y_pos((Display::get_height() - 600)/2)
 {
   background = Resource::load_sprite("core/menu/filedialog");
   ok_button  = Resource::load_sprite("core/start/ok");
-  marker     = Resource::load_sprite("core/menu/marker");
-  marker_small = Resource::load_sprite("core/menu/marker2");
-  marker_locked = Resource::load_sprite("core/menu/marker_locked");
 
-  std::string path = Pathname("levelsets", Pathname::DATA_PATH).get_sys_path();
-  System::Directory directory = System::opendir(path, "*.levelset");
-  for(System::Directory::iterator i = directory.begin(); i != directory.end(); 
++i)
-    {
-      levelsets.push_back(new Levelset(Pathname(path + "/" + i->name, 
Pathname::SYSTEM_PATH)));
-    }
+  level_selector    = new LevelSelector(this, Rect(Vector2i(x_pos + 100, y_pos 
+ 140), Size(600, 300)));
+  levelset_selector = new LevelsetSelector(this, Rect(Vector2i(x_pos + 100, 
y_pos + 140), Size(600, 300)));
+
+  gui_manager->add(levelset_selector, true);
+  gui_manager->add(level_selector,    true);
+
+  level_selector->hide();
 }
-
+
 LevelMenu::~LevelMenu()
 {
-  for(Levelsets::iterator i = levelsets.begin(); i != levelsets.end(); ++i)
-    {
-      delete *i;
-    }
 }
 
 void
-LevelMenu::update(const GameDelta& delta)
-{
-  GUIScreen::update(delta);
-  SDL_Delay(50);
-}
-
-void
 LevelMenu::draw_background(DrawingContext& gc)
 {
   gc.push_modelview();
@@ -71,78 +210,30 @@
   // gc.draw_fillrect(Rect(100, 100, 400, 400), Color(255, 0, 0));
   gc.draw(background, Vector2i(400 - background.get_width()/2, 300 - 
background.get_height()/2));
 
-  if (!current_levelset)
-    {
-      gc.print_center(Fonts::chalk_large, 800/2, 90, _("Levelset Menu"));
-
-      int y = 145;
-      for(Levelsets::iterator i = levelsets.begin(); i != levelsets.end(); ++i)
-        {
-          if (i == levelsets.begin())
-            gc.draw(marker, 100, y - 20);
-
-          gc.print_left(Fonts::chalk_normal, 120,  0 + y, (*i)->get_title());
-          gc.print_left(Fonts::chalk_small,  140, 25 + y, 
(*i)->get_description());
-
-          gc.print_right(Fonts::chalk_normal, 650, 0 + y, 
(boost::format("Completion: %1%%%") % (*i)->get_completion()).str());
-          gc.print_right(Fonts::chalk_small,  650, 45 + y, (boost::format("%1% 
levels") % (*i)->get_level_count()).str());
-
-          //gc.draw(ok_button, 620, y);
-
-          y += 90;
-        }
-      //gc.draw(ok_button, 610, 145);
-    }
-  else
-    {
-      Levelset* levelset = *levelsets.begin();
-
-      gc.print_center(Fonts::chalk_large, 800/2, 90, _(levelset->get_title()));
-
-      gc.print_left(Fonts::chalk_normal,  120, 145, "Levelname");
-      gc.print_right(Fonts::chalk_normal, 660, 145, "Completed");
-      int y = 185;
-      for(int i = 0; i < levelset->get_level_count(); ++i)
-        {
-          if (i == 0)
-            gc.draw(marker_small, 100, y-4);
-          else if (i > 3)
-            gc.draw(marker_locked, 100, y-4);
-
-          std::string level = levelset->get_level(i);          
-          gc.print_left(Fonts::chalk_small, 120, y, level);
-          gc.print_right(Fonts::chalk_small, 660, y, "[x]");
-          y += 32;
-        }
-    }
   gc.pop_modelview();
 }
 
 void
-LevelMenu::on_pointer_move (int x, int y)
+LevelMenu::on_escape_press()
 {
-
+  std::cout << "OptionMenu: poping screen" << std::endl;
+  ScreenManager::instance()->pop_screen();
 }
 
-void 
-LevelMenu::on_pause_press()
+void
+LevelMenu::set_levelset(Levelset* levelset)
 {
-  std::cout << "Click" << std::endl;
-  if (current_levelset)
+  if (levelset)
     {
-      current_levelset = 0;
+      level_selector->set_levelset(levelset);
+      levelset_selector->hide();
+      level_selector->show();
     }
   else
     {
-      current_levelset = levelsets.front();
+      levelset_selector->show();
+      level_selector->hide();      
     }
 }
 
-void
-LevelMenu::on_escape_press()
-{
-  std::cout << "OptionMenu: poping screen" << std::endl;
-  ScreenManager::instance()->pop_screen();
-}
-
 /* EOF */

Modified: trunk/pingus/src/level_menu.hpp
===================================================================
--- trunk/pingus/src/level_menu.hpp     2007-10-27 07:26:45 UTC (rev 3341)
+++ trunk/pingus/src/level_menu.hpp     2007-10-27 09:31:13 UTC (rev 3342)
@@ -24,6 +24,9 @@
 #include "sprite.hpp"
 #include "screen/gui_screen.hpp"
 
+class LevelSelector;
+class LevelsetSelector;
+
 /** */
 class LevelMenu : public GUIScreen
 {
@@ -33,24 +36,19 @@
 
   Sprite background;
   Sprite ok_button;
-  Sprite marker;
-  Sprite marker_small;
-  Sprite marker_locked;
 
-  typedef std::vector<Levelset*> Levelsets;
-  Levelsets levelsets;
+  LevelSelector* level_selector;
+  LevelsetSelector* levelset_selector;
 
-  Levelset* current_levelset;
-
 public:
   LevelMenu();
   ~LevelMenu();
   
   void draw_background (DrawingContext& gc);
-  void update (const GameDelta& delta);
   void on_escape_press ();
-  void on_pointer_move (int x, int y);
-  void on_pause_press();
+  
+  void set_levelset(Levelset* levelset);
+
 private:
   LevelMenu (const LevelMenu&);
   LevelMenu& operator= (const LevelMenu&);





reply via email to

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