#include <physfs.h>
#include <sstream>
+#include "gui/menu_item.hpp"
#include "gui/menu_manager.hpp"
#include "supertux/game_manager.hpp"
#include "supertux/gameconfig.hpp"
-#include "supertux/menu/contrib_world_menu.hpp"
+#include "supertux/menu/contrib_levelset_menu.hpp"
#include "supertux/menu/menu_storage.hpp"
#include "supertux/title_screen.hpp"
#include "supertux/world.hpp"
ContribMenu::ContribMenu() :
m_contrib_worlds()
{
- /** Generating contrib levels list by making use of Level Subset */
+ // Generating contrib levels list by making use of Level Subset
std::vector<std::string> level_worlds;
- char** files = PHYSFS_enumerateFiles("levels/");
- for(const char* const* filename = files; *filename != 0; ++filename) {
- std::string filepath = std::string("levels/") + *filename;
+
+ std::unique_ptr<char*, decltype(&PHYSFS_freeList)>
+ files(PHYSFS_enumerateFiles("levels"),
+ PHYSFS_freeList);
+ for(const char* const* filename = files.get(); *filename != 0; ++filename)
+ {
+ std::string filepath = FileSystem::join("levels", *filename);
if(PHYSFS_isDirectory(filepath.c_str()))
+ {
level_worlds.push_back(filepath);
+ }
}
- PHYSFS_freeList(files);
add_label(_("Contrib Levels"));
add_hl();
}
level_count += 1;
}
-
+
std::ostringstream title;
title << "[" << world->get_title() << "]";
if (level_count == 0)
}
level_count += 1;
}
-
+
std::ostringstream title;
title << world->get_title();
if (level_count == 0)
}
void
-ContribMenu::check_menu()
+ContribMenu::menu_action(MenuItem* item)
{
- int index = check();
+ int index = item->id;
if (index != -1)
{
// reload the World so that we have something that we can safely
std::unique_ptr<World> world = World::load(m_contrib_worlds[index]->get_basedir());
if (!world->is_levelset())
{
- GameManager::current()->start_game(std::move(world));
+ GameManager::current()->start_worldmap(std::move(world));
}
else
{
- MenuManager::instance().push_menu(std::unique_ptr<Menu>(new ContribWorldMenu(std::move(world))));
+ MenuManager::instance().push_menu(std::unique_ptr<Menu>(new ContribLevelsetMenu(std::move(world))));
}
}
}