#ifndef HEADER_SUPERTUX_SUPERTUX_WORLD_HPP
#define HEADER_SUPERTUX_SUPERTUX_WORLD_HPP
+#include <memory>
#include <squirrel.h>
#include <string>
#include <vector>
-#include "util/currenton.hpp"
+#include "supertux/savegame.hpp"
-class PlayerStatus;
-
-class World : public Currenton<World>
+class World
{
-public:
+private:
World();
- ~World();
- void set_savegame_filename(const std::string& filename);
- void load(const std::string& filename);
+ void load_(const std::string& directory);
+
+public:
+ /**
+ Load a World
- void save_state();
- void load_state();
+ @param directory Directory containing the info file, e.g. "levels/world1"
+ */
+ static std::unique_ptr<World> load(const std::string& directory);
- unsigned int get_num_levels() const;
- int get_num_solved_levels() const;
+public:
+ ~World();
- const std::string& get_level_filename(unsigned int i) const;
- const std::string& get_basedir() const;
- const std::string& get_title() const;
+ std::string get_basedir() const;
+ std::string get_title() const;
- PlayerStatus* get_player_status() const { return player_status.get(); }
+ bool hide_from_contribs() const { return m_hide_from_contribs; }
- void run();
+ bool is_levelset() const { return m_is_levelset; }
+ bool is_worldmap() const { return !m_is_levelset; }
+
+ std::string get_worldmap_filename() const { return m_worldmap_filename; }
+ std::string get_savegame_filename() const { return m_savegame_filename; }
private:
+ std::string m_basedir;
std::string m_worldmap_filename;
- struct Level
- {
- Level() : fullpath(), name() {}
- std::string fullpath;
- std::string name;
- };
-
- std::vector<Level> levels;
- std::string basedir;
- std::string savegame_filename;
- HSQOBJECT world_thread;
- std::string title;
- std::string description;
- std::unique_ptr<PlayerStatus> player_status;
+ std::string m_savegame_filename;
-public:
- bool hide_from_contribs;
- bool is_levelset;
+ std::string m_title;
+ std::string m_description;
+ bool m_hide_from_contribs;
+ bool m_is_levelset;
private:
World(const World&) = delete;