X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=c2a7154a887bfe311047cff41687c11958f6d970;hb=599adb53dbdfdcc4ac4e4dfab1e0868ff0412110;hp=75abd837a0116f199e801adb8e73de85febecac2;hpb=eb4ce0c7020f9fd57c4434eb3b173041ef91f591;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index 75abd837a..c2a7154a8 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -23,7 +23,7 @@ #include #include -#include +#include "musicref.h" namespace WorldMapNS { @@ -46,8 +46,12 @@ struct Point int y; }; -struct Tile +class Tile { +public: + Tile(); + ~Tile(); + Surface* sprite; // Directions in which Tux is allowed to walk from this tile @@ -58,6 +62,10 @@ struct Tile /** 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 @@ -65,25 +73,31 @@ class TileManager private: typedef std::vector Tiles; Tiles tiles; - static TileManager* instance_ ; - TileManager(); public: - static TileManager* instance() { return instance_ ? instance_ : instance_ = new TileManager(); } + TileManager(); + ~TileManager(); - void load(); Tile* get(int i); }; enum Direction { NONE, WEST, EAST, NORTH, SOUTH }; +std::string direction_to_string(Direction d); +Direction string_to_direction(const std::string& d); +Direction reverse_dir(Direction d); + class WorldMap; class Tux { +public: + Direction back_direction; private: WorldMap* worldmap; - Surface* sprite; + Surface* largetux_sprite; + Surface* firetux_sprite; + Surface* smalltux_sprite; Direction input_direction; Direction direction; @@ -96,6 +110,7 @@ private: void stop(); public: Tux(WorldMap* worldmap_); + ~Tux(); void draw(const Point& offset); void update(float delta); @@ -127,18 +142,29 @@ private: int width; int height; + TileManager* tile_manager; + +public: struct Level { int x; int y; std::string name; + std::string title; bool solved; + + // Directions which are walkable from this level + bool north; + bool east; + bool south; + bool west; }; +private: typedef std::vector Levels; Levels levels; - Mix_Music* song; + MusicRef song; Direction input_direction; bool enter_level; @@ -146,6 +172,8 @@ private: Point offset; std::string savegame_file; + void get_level_title(Levels::pointer level); + void draw_status(); public: WorldMap(); @@ -166,6 +194,7 @@ public: Point get_next_tile(Point pos, Direction direction); Tile* at(Point pos); + WorldMap::Level* at_level(); /** Check if it is possible to walk from \a pos into \a direction, if possible, write the new position to \a new_pos */ @@ -173,6 +202,8 @@ public: void savegame(const std::string& filename); void loadgame(const std::string& filename); +private: + void on_escape_press(); }; } // namespace WorldMapNS