X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=a96c4ff27b9592714e1cfbccd5305b97e6c7956c;hb=997685a947eaa0b269873e5956908b734cde1d76;hp=d8317936c9a1c98e6b2c62f656d37d6d14e64d1b;hpb=2cea58600cea4838a6f7ba00f66f9ede187eba39;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index d8317936c..a96c4ff27 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -17,18 +17,28 @@ // 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 { Point() : x(0), y(0) {} + Point(const Point& pos) + : x(pos.x), y(pos.y) {} + + Point& operator=(const Point& pos) + { x = pos.x; + y = pos.y; + return *this; } + Point(int x_, int y_) : x(x_), y(y_) {} @@ -36,22 +46,9 @@ struct Point int y; }; -struct Pointf -{ - float x; - float 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; @@ -78,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; @@ -93,23 +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 offset; + + void draw_status(); public: WorldMap(); ~WorldMap(); @@ -125,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 @@ -136,4 +181,4 @@ void worldmap_run(); /* Local Variables: */ /* mode:c++ */ -/* End */ +/* End: */