X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftilemap.h;h=92d121dfce8be50d65cfe37eb39ca498c070c69c;hb=b524515944583916655a9f2cf1a667e55e7ed4ce;hp=334a7e3376c31a7a8ac0233e234cc90bb69bba8b;hpb=42398ef94da66fa3eb3d42aeae45c9076cae99ca;p=supertux.git diff --git a/src/tilemap.h b/src/tilemap.h index 334a7e337..92d121dfc 100644 --- a/src/tilemap.h +++ b/src/tilemap.h @@ -16,31 +16,98 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#ifndef __TILEMAP_H__ -#define __TILEMAP_H__ -#include "game_object.h" -#include "drawable.h" +#ifndef SUPERTUX_TILEMAP_H +#define SUPERTUX_TILEMAP_H + +#include + +#include "special/game_object.h" +#include "serializable.h" +#include "math/vector.h" + +using namespace SuperTux; + +namespace SuperTux { +class LispReader; +} class Level; +class TileManager; +class Tile; + +struct TileId +{ + TileId() : id(0), hidden(0) {} + explicit TileId(unsigned int i, bool hidden_ = false) : id(i), hidden(hidden_) {} + + unsigned id :31; + unsigned hidden :1; +}; /** * This class is reponsible for drawing the level tiles */ -class TileMap : public GameObject, public Drawable +class TileMap : public GameObject, public Serializable { public: - TileMap(DisplayManager& manager, Level* level); + TileMap(); + TileMap(LispReader& reader); + TileMap(int layer_, bool solid_, size_t width_, size_t height_); virtual ~TileMap(); + virtual void write(LispWriter& writer); + virtual void action(float elapsed_time); - virtual void draw(ViewPort& viewport, int layer); - virtual std::string type() const - { return "TileMap"; } + 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); + + /** Flip the all tile map vertically. The purpose of this is to let + player to play the same level in a different way :) */ + void do_vertical_flip(); + + size_t get_width() const + { return width; } + + size_t get_height() const + { return height; } + + int get_layer() const + { return layer; } + bool is_solid() const + { return solid; } + + TileId& get_tile_id_at(const Vector& pos); + + /// 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); + private: - Level* level; + std::vector tiles; + +private: + TileManager* tilemanager; + bool solid; + float speed; + int width, height; + int layer; + + bool vertical_flip; }; -#endif +#endif /*SUPERTUX_TILEMAP_H*/