X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=c2a7154a887bfe311047cff41687c11958f6d970;hb=599adb53dbdfdcc4ac4e4dfab1e0868ff0412110;hp=b347bc928c55f03ef9774afce63a8b23bca3e648;hpb=7d3e916fd2af697e7aa24e739d9adfd30aeb58a5;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index b347bc928..c2a7154a8 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -17,12 +17,14 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#ifndef HEADER_WORLDMAP_HXX -#define HEADER_WORLDMAP_HXX +#ifndef SUPERTUX_WORLDMAP_H +#define SUPERTUX_WORLDMAP_H #include #include +#include "musicref.h" + namespace WorldMapNS { struct Point @@ -44,16 +46,13 @@ struct Point int y; }; -struct Level -{ - int x; - int y; - std::string name; -}; - -struct Tile +class Tile { - texture_type sprite; +public: + Tile(); + ~Tile(); + + Surface* sprite; // Directions in which Tux is allowed to walk from this tile bool north; @@ -63,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 @@ -70,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; - texture_type sprite; + Surface* largetux_sprite; + Surface* firetux_sprite; + Surface* smalltux_sprite; Direction input_direction; Direction direction; @@ -101,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; } }; @@ -118,9 +129,12 @@ class WorldMap private: Tux* tux; - texture_type level_sprite; bool quit; + Surface* level_sprite; + Surface* leveldot_green; + Surface* leveldot_red; + std::string name; std::string music; @@ -128,14 +142,39 @@ 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; + Point offset; + std::string savegame_file; + + void get_level_title(Levels::pointer level); + + void draw_status(); public: WorldMap(); ~WorldMap(); @@ -151,19 +190,26 @@ public: void update(); /** Draw one frame */ - void draw(); + void draw(const Point& offset); Point get_next_tile(Point pos, Direction direction); Tile* at(Point pos); - bool path_ok(Direction direction, Point old_pos, Point* new_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: */ /* mode:c++ */ -/* End */ +/* End: */