X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=4bf2b69ceb96071c1a84e5dd312df9fd47d86ef7;hb=02d54bd21d3d72e46ecad8f6038666b0384d4eb8;hp=d09deb244d76e5fe7d9f9575e3da1953583822c9;hpb=a2857397f9afd626046a2005d2614a14d9e11804;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index d09deb244..4bf2b69ce 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -16,7 +16,6 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - #ifndef SUPERTUX_WORLDMAP_H #define SUPERTUX_WORLDMAP_H @@ -27,6 +26,11 @@ #include "audio/musicref.h" #include "video/screen.h" #include "statistics.h" +#include "timer.h" + +namespace SuperTux { + class Menu; +} extern Menu* worldmap_menu; @@ -51,8 +55,11 @@ class Tile public: Tile(); ~Tile(); - - Surface* sprite; + + void draw(DrawingContext& context, Vector pos); + + std::vector images; + float anim_fps; // Directions in which Tux is allowed to walk from this tile bool north; @@ -154,9 +161,32 @@ private: public: struct SpecialTile { - int x; - int y; - std::string level_name; + Vector pos; + + /** Optional flags: */ + + /** Position to swap to player */ + Vector teleport_dest; + + /** Message to show in the Map */ + std::string map_message; + bool passive_message; + + /** Hide special tile */ + bool invisible; + + /** Only applies actions (ie. passive messages) when going to that direction */ + bool apply_action_north; + bool apply_action_east; + bool apply_action_south; + bool apply_action_west; + }; + + struct Level + { + Vector pos; + + std::string name; std::string title; bool solved; @@ -172,16 +202,6 @@ public: successfully completed */ std::string extro_filename; - /** Position to swap to player */ - int teleport_dest_x, teleport_dest_y; - - /** Message to show in the Map */ - std::string map_message; - bool passive_message; - - /** Hide special tile */ - bool invisible; - /** Go to this world */ std::string next_worldmap; @@ -196,16 +216,10 @@ public: bool east; bool south; bool west; - - /** Only applies actions (ie. passive messages) when going to that direction */ - bool apply_action_north; - bool apply_action_east; - bool apply_action_south; - bool apply_action_west; }; /** Variables to deal with the passive map messages */ - Timer passive_message_timer; + Timer2 passive_message_timer; std::string passive_message; private: @@ -214,6 +228,9 @@ private: typedef std::vector SpecialTiles; SpecialTiles special_tiles; + typedef std::vector Levels; + Levels levels; + MusicRef song; bool enter_level; @@ -221,7 +238,7 @@ private: Vector offset; std::string savegame_file; - void get_level_title(SpecialTile& special_tile); + void get_level_title(Level& level); void draw_status(DrawingContext& context); @@ -249,6 +266,8 @@ public: Vector get_next_tile(Vector pos, Direction direction); Tile* at(Vector pos); + + WorldMap::Level* at_level(); WorldMap::SpecialTile* at_special_tile(); /** Check if it is possible to walk from \a pos into \a direction, @@ -257,7 +276,8 @@ public: /* Save map to slot */ void savegame(const std::string& filename); - /* Load map from slot */ + /* Load map from slot + You should call set_map_filename() before this */ void loadgame(const std::string& filename); /* Load map directly from file */ void loadmap(const std::string& filename); @@ -271,6 +291,9 @@ public: const int& get_start_y() const { return start_y; } + void set_map_filename(std::string filename) + { map_filename = filename; } + private: void on_escape_press(); };