[Top][All Lists]
[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&);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3342 - trunk/pingus/src,
grumbel at BerliOS <=