X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=01d0bfa26acbd869a8d9a713477825d16797ac81;hb=6f988a2dfbe4de1096a5ca6a4b30e7fc5355316c;hp=287d0552524e87c11023aec2affa9fa8af45decd;hpb=2236c2d6e68a9a3bbff4dd2953f868ee2aae8f6a;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index 287d05525..01d0bfa26 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 @@ -26,8 +25,14 @@ #include "math/vector.h" #include "audio/musicref.h" #include "video/screen.h" +#include "lisp/lisp.h" #include "statistics.h" -#include "special/timer.h" +#include "timer.h" +#include "tile_manager.h" + +namespace SuperTux { + class Menu; +} extern Menu* worldmap_menu; @@ -36,7 +41,7 @@ namespace WorldMapNS { enum WorldMapMenuIDs { MNID_RETURNWORLDMAP, MNID_QUITWORLDMAP - }; +}; // For one way tiles enum { @@ -45,47 +50,6 @@ enum { SOUTH_NORTH_WAY, EAST_WEST_WAY, WEST_EAST_WAY - }; - -class Tile -{ -public: - Tile(); - ~Tile(); - - 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; - bool east; - bool south; - bool west; - - /** One way tile */ - int one_way; - - /** Stop on this tile or walk over it? */ - bool stop; - - /** When set automatically turn directions when walked over such a - tile (ie. walk smoothly a curve) */ - bool auto_walk; -}; - -class TileManager -{ -private: - typedef std::vector Tiles; - Tiles tiles; - -public: - TileManager(); - ~TileManager(); - - Tile* get(int i); }; enum Direction { D_NONE, D_WEST, D_EAST, D_NORTH, D_SOUTH }; @@ -158,9 +122,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; @@ -176,16 +163,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; @@ -200,32 +177,33 @@ 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: std::string map_filename; + std::string levels_path; typedef std::vector SpecialTiles; SpecialTiles special_tiles; + typedef std::vector Levels; + Levels levels; + MusicRef song; bool enter_level; Vector offset; std::string savegame_file; + + std::string intro_filename; + bool intro_displayed; - void get_level_title(SpecialTile& special_tile); + void get_level_title(Level& level); void draw_status(DrawingContext& context); @@ -234,8 +212,6 @@ private: Statistics total_stats; void calculate_total_stats(); - Timer frame_timer; - public: WorldMap(); ~WorldMap(); @@ -254,7 +230,9 @@ public: void draw(DrawingContext& context, const Vector& offset); Vector get_next_tile(Vector pos, Direction direction); - Tile* at(Vector pos); + const 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, @@ -283,6 +261,7 @@ public: private: void on_escape_press(); + void parse_special_tiles(const lisp::Lisp* lisp); }; } // namespace WorldMapNS