X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=f44ba506064c68736cfd0c97da02bd06a50adbd0;hb=546364c9567ef212ea9276201facf73f5ada696a;hp=cf5848757790358c23cb2d297857e9294f6c9521;hpb=ac33c9544ab81b79b371b3d0b681d7e6a2dab15b;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index cf5848757..f44ba5060 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -26,6 +26,8 @@ #include "math/vector.h" #include "audio/musicref.h" #include "video/screen.h" +#include "statistics.h" +#include "special/timer.h" extern Menu* worldmap_menu; @@ -50,8 +52,11 @@ class Tile public: Tile(); ~Tile(); - - Surface* sprite; + + void draw(DrawingContext& context, Vector pos); + + std::vector images; + int anim_speed; // Directions in which Tux is allowed to walk from this tile bool north; @@ -153,23 +158,12 @@ private: public: struct SpecialTile { - int x; - int y; - std::string level_name; - std::string title; - bool solved; + Vector pos; /** Optional flags: */ - /** Check if this level should be vertically flipped */ - bool vertical_flip; - - /** Filename of the extro text to show once the level is - successfully completed */ - std::string extro_filename; - /** Position to swap to player */ - int teleport_dest_x, teleport_dest_y; + Vector teleport_dest; /** Message to show in the Map */ std::string map_message; @@ -178,6 +172,33 @@ public: /** 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; + + /** Statistics for level tiles */ + Statistics statistics; + + /** Optional flags: */ + + /** Check if this level should be vertically flipped */ + bool vertical_flip; + + /** Filename of the extro text to show once the level is + successfully completed */ + std::string extro_filename; + /** Go to this world */ std::string next_worldmap; @@ -192,12 +213,6 @@ 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 */ @@ -210,6 +225,9 @@ private: typedef std::vector SpecialTiles; SpecialTiles special_tiles; + typedef std::vector Levels; + Levels levels; + MusicRef song; bool enter_level; @@ -217,9 +235,17 @@ 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); + + // to avoid calculating total stats all the time. This way only + // when need, it is calculated. + Statistics total_stats; + void calculate_total_stats(); + + Timer frame_timer; + public: WorldMap(); ~WorldMap(); @@ -239,6 +265,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, @@ -247,7 +275,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); @@ -261,6 +290,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(); };