X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=a96c4ff27b9592714e1cfbccd5305b97e6c7956c;hb=997685a947eaa0b269873e5956908b734cde1d76;hp=35315c17ab8baac6efd000ba39f4f9ee297a98ea;hpb=d0176324c96fbe2f2590e831bdbccdda9e17c1be;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index 35315c17a..a96c4ff27 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 + namespace WorldMapNS { struct Point @@ -44,16 +46,9 @@ struct Point int y; }; -struct Level -{ - int x; - int y; - std::string name; -}; - struct Tile { - texture_type sprite; + Surface* sprite; // Directions in which Tux is allowed to walk from this tile bool north; @@ -80,12 +75,49 @@ public: Tile* get(int i); }; +enum Direction { NONE, WEST, EAST, NORTH, SOUTH }; + +class WorldMap; + +class Tux +{ +private: + WorldMap* worldmap; + Surface* sprite; + + Direction input_direction; + Direction direction; + Point tile_pos; + /** Length by which tux is away from its current tile, length is in + input_direction direction */ + float offset; + bool moving; + + void stop(); +public: + Tux(WorldMap* worldmap_); + + 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; } +}; + /** */ class WorldMap { private: - texture_type tux_sprite; - texture_type level_sprite; + Tux* tux; + + Surface* level_sprite; + Surface* leveldot_green; + Surface* leveldot_red; + bool quit; std::string name; @@ -95,25 +127,25 @@ private: int width; int height; + struct Level + { + int x; + int y; + std::string name; + bool solved; + }; + typedef std::vector Levels; Levels levels; Mix_Music* song; - enum Direction { NONE, WEST, EAST, NORTH, SOUTH }; - Direction tux_direction; - Point tux_tile_pos; - /** Length by which tux is away from its current tile, length is in - input_direction direction */ - float tux_offset; - bool tux_moving; - Direction input_direction; bool enter_level; - Tile* at(Point pos); - Point get_next_tile(Point pos, Direction direction); - bool path_ok(Direction direction, Point old_pos, Point* new_pos); + Point offset; + + void draw_status(); public: WorldMap(); ~WorldMap(); @@ -129,7 +161,16 @@ 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); + + /** 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); }; } // namespace WorldMapNS @@ -140,4 +181,4 @@ void worldmap_run(); /* Local Variables: */ /* mode:c++ */ -/* End */ +/* End: */