X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftile.h;h=978ed3a5209a83f081294c5855d601e16e48a3df;hb=308f11e38981077626fe0ea9887094f3c28b02f9;hp=9123422c508fe3269efc0b8a340a6c6346e3a10a;hpb=67df4c8d8e37b4843af5ec262a89f267f4fd93d4;p=supertux.git diff --git a/src/tile.h b/src/tile.h index 9123422c5..978ed3a52 100644 --- a/src/tile.h +++ b/src/tile.h @@ -24,12 +24,15 @@ #include #include #include -#include "texture.h" + +#include "screen/texture.h" #include "globals.h" #include "lispreader.h" #include "setup.h" #include "vector.h" +class LispReader; + /** Tile Class */ @@ -39,46 +42,43 @@ public: Tile(); ~Tile(); + /// parses the tile and returns it's id number + int read(LispReader& reader); + int id; std::vector images; std::vector editor_images; - std::vector filenames; - std::vector editor_filenames; + /// bitset for tileflags + enum { + /** solid tile that is indestructable by Tux */ + SOLID = 0x0001, + /** uni-directional solid tile */ + UNISOLID = 0x0002, + /** a brick that can be destroyed by jumping under it */ + BRICK = 0x0004, + /** an ice brick that makes tux sliding more than usual */ + ICE = 0x0008, + /** a water tile in which tux starts to swim */ + WATER = 0x0010, + /** a tile that hurts the player if he touches it */ + SPIKE = 0x0020, + /** Bonusbox, content is stored in \a data */ + FULLBOX = 0x0040, + /** Tile is a coin */ + COIN = 0x0080, + /** the level should be finished when touching a goaltile. + * if data is 0 then the endsequence should be triggered, if data is 1 + * then we can finish the level instantly. + */ + GOAL = 0x0100 + }; + + /** tile attributes */ + Uint32 attributes; - /** solid tile that is indestructable by Tux */ - bool solid; - - /** uni-directional solid tile */ - bool unisolid; - - /** a brick that can be destroyed by jumping under it */ - bool brick; - - /** FIXME: ? */ - bool ice; - - /** water */ - bool water; - - /** spike - kills player on contact */ - bool spike; - - /** Bonusbox, content is stored in \a data */ - bool fullbox; - - /** Tile is a distro/coin */ - bool distro; - - - /** the level should be finished when touching a goaltile. - * if data is 0 then the endsequence should be triggered, if data is 1 - * then we can finish the level instantly. - */ - bool goal; - - /** General purpose data attached to a tile (content of a box, type of coin) */ + /** General purpose data attached to a tile (content of a box, type of coin)*/ int data; /** Id of the tile that is going to replace this tile once it has @@ -88,12 +88,22 @@ public: int anim_speed; /** Draw a tile on the screen: */ - static void draw(float x, float y, unsigned int c, Uint8 alpha = 255); - static void draw_stretched(float x, float y, int w, int h, unsigned int c, Uint8 alpha = 255); + static void draw(const Vector& pos, unsigned int c, Uint8 alpha = 255); + + /// returns the width of the tile in pixels + int getWidth() const + { + if(!images.size()) + return 0; + return images[0]->w; + } - static void draw(const Vector& pos, unsigned int c, Uint8 alpha = 255) + /// returns the height of the tiles in pixels + int getHeight() const { - draw(pos.x, pos.y, c, alpha); + if(!images.size()) + return 0; + return images[0]->h; } }; @@ -122,8 +132,13 @@ class TileManager std::string current_tileset; public: - static TileManager* instance() { return instance_ ? instance_ : instance_ = new TileManager(); } - static void destroy_instance() { delete instance_; instance_ = 0; } + static TileManager* instance() + { return instance_ ? instance_ : instance_ = new TileManager(); } + static void destroy_instance() + { delete instance_; instance_ = 0; } + + void draw_tile(DrawingContext& context, unsigned int id, + const Vector& pos, int layer); static std::set* tilegroups() { if(!instance_) { instance_ = new TileManager(); } return tilegroups_ ? tilegroups_ : tilegroups_ = new std::set; } Tile* get(unsigned int id) {