X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fworldmap.h;h=a4898fbf67d36119f23a345fba567f2d8fcead55;hb=f09e14d431eb3d71cd290a68171ab7e174583a6b;hp=0dfc037e6f5d8d3f5ac87bc2d2bbc406ed0d315b;hpb=9e082fc66762cb43a25955a971082a0a5aab0840;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index 0dfc037e6..a4898fbf6 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,13 +110,15 @@ private: void stop(); public: Tux(WorldMap* worldmap_); + ~Tux(); - void draw(); + void draw(const Point& offset); void update(float delta); void set_direction(Direction d) { input_direction = d; } bool is_moving() const { return moving; } + Point get_pos(); Point get_tile_pos() const { return tile_pos; } void set_tile_pos(Point p) { tile_pos = p; } }; @@ -113,12 +129,12 @@ class WorldMap private: Tux* tux; + bool quit; + Surface* level_sprite; Surface* leveldot_green; Surface* leveldot_red; - bool quit; - std::string name; std::string music; @@ -126,21 +142,43 @@ private: int width; int height; + TileManager* tile_manager; + +public: struct Level { int x; int y; std::string name; + std::string title; + bool solved; + + /** Filename of the extro text to show once the level is + successfully completed */ + std::string extro_filename; + + // 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; + Point offset; + std::string savegame_file; + + void get_level_title(Levels::pointer level); + + void draw_status(); public: WorldMap(); ~WorldMap(); @@ -153,23 +191,27 @@ public: void get_input(); /** Update Tux position */ - void update(); + void update(float delta); /** Draw one frame */ - void draw(); + void draw(const Point& offset); 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 */ bool path_ok(Direction direction, Point pos, Point* new_pos); + + void savegame(const std::string& filename); + void loadgame(const std::string& filename); +private: + void on_escape_press(); }; } // namespace WorldMapNS -void worldmap_run(); - #endif /* Local Variables: */