X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftilemap.h;h=b629ccd647989df98031b2eaa6770fdfabd8a850;hb=828b5e1ef1cb89d830735f24dd79bbd9b09d5b32;hp=8d8f291f30034536612951867b2ac9ffb1bbf648;hpb=03fe5c560a616e7d38a8b1d5d11bfe4675fa8896;p=supertux.git diff --git a/src/tilemap.h b/src/tilemap.h index 8d8f291f3..b629ccd64 100644 --- a/src/tilemap.h +++ b/src/tilemap.h @@ -22,27 +22,65 @@ #include #include "game_object.h" #include "serializable.h" +#include "vector.h" class Level; class TileManager; +class LispReader; +class Tile; /** * This class is reponsible for drawing the level tiles */ -class TileMap : public GameObject +class TileMap : public GameObject, public Serializable { public: - TileMap(Level* level); + TileMap(); + TileMap(LispReader& reader); virtual ~TileMap(); + virtual void write(LispWriter& writer); + virtual void action(float elapsed_time); - virtual void draw(const std::vector& tiles, - DrawingContext& context, int layer); virtual void draw(DrawingContext& context); + + void set(int width, int height, const std::vector& vec, + int layer, bool solid); + + /** resizes the tilemap to a new width and height (tries to not destroy the + * existing map) + */ + void resize(int newwidth, int newheight); + + size_t get_width() const + { return width; } + + size_t get_height() const + { return height; } + + bool is_solid() const + { return solid; } + + unsigned int get_tile_id_at(const Vector& pos) const; + + /// returns tile in row y and column y (of the tilemap) + Tile* get_tile(int x, int y) const; + /// returns tile at position pos (in world coordinates) + Tile* get_tile_at(const Vector& pos) const; + + void change(int x, int y, unsigned int newtile); + + void change_at(const Vector& pos, unsigned int newtile); + +public: + std::vector tiles; private: TileManager* tilemanager; - Level* level; + bool solid; + float speed; + int width, height; + int layer; }; #endif