X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=9968ce048b505fdb51901f9814ca783dfa9e9f31;hb=e59a8e5e758978341d5410f09b705c4e969dc9a0;hp=ef5d419cb0bfcc055293c81c47cf7c57d97b4479;hpb=8c1b75e07ecb89a4bdd7554bcf58fd263e0f0c62;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index ef5d419cb..9968ce048 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -23,30 +23,27 @@ #include #include +#include + namespace WorldMapNS { struct Point { Point() : x(0), y(0) {} - Point(int x_, int y_) - : x(x_), y(y_) {} + Point(const Point& pos) + : x(pos.x), y(pos.y) {} - int x; - int y; -}; + Point& operator=(const Point& pos) + { x = pos.x; + y = pos.y; + return *this; } -struct Pointf -{ - float x; - float y; -}; + Point(int x_, int y_) + : x(x_), y(y_) {} -struct Level -{ int x; int y; - std::string name; }; struct Tile @@ -78,11 +75,44 @@ public: Tile* get(int i); }; +enum Direction { NONE, WEST, EAST, NORTH, SOUTH }; + +class WorldMap; + +class Tux +{ +private: + WorldMap* worldmap; + texture_type 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(); + void update(float delta); + + void set_direction(Direction d) { input_direction = d; } + + bool is_moving() const { return moving; } + Point get_tile_pos() const { return tile_pos; } + void set_tile_pos(Point p) { tile_pos = p; } +}; + /** */ class WorldMap { private: - texture_type tux_sprite; + Tux* tux; + texture_type level_sprite; bool quit; @@ -93,24 +123,21 @@ private: int width; int height; + struct Level + { + int x; + int y; + std::string name; + }; + 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); public: WorldMap(); ~WorldMap(); @@ -127,6 +154,13 @@ public: /** Draw one frame */ void draw(); + + 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); }; } // namespace WorldMapNS