X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftile.h;h=692bfe804f31d9b0171f8bd7671d09c03afb3736;hb=546364c9567ef212ea9276201facf73f5ada696a;hp=3dea6c634322e8cda41044905903f2d164e70101;hpb=84160722392a024dda42bd86ca9bd85b68c49457;p=supertux.git diff --git a/src/tile.h b/src/tile.h index 3dea6c634..692bfe804 100644 --- a/src/tile.h +++ b/src/tile.h @@ -21,44 +21,62 @@ #ifndef TILE_H #define TILE_H -#include #include -#include "texture.h" -#include "globals.h" -#include "lispreader.h" -#include "setup.h" +#include "SDL.h" +#include "video/surface.h" + +using namespace SuperTux; + +namespace SuperTux { +class LispReader; +} /** Tile Class */ -struct Tile +class Tile { +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; - - /** solid tile that is indestructable by Tux */ - bool solid; - - /** a brick that can be destroyed by jumping under it */ - bool brick; - - /** FIXME: ? */ - bool ice; - - /** water */ - bool water; - - /** Bonusbox, content is stored in \a data */ - bool fullbox; - - /** Tile is a distro/coin */ - bool distro; - - /** General purpose data attached to a tile (content of a box, type of coin) */ + /// 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; + + /** 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 @@ -66,42 +84,30 @@ struct Tile int next_tile; int anim_speed; + + /** This is the angle of the slope. Set to 0, if this is no slope. */ + float slope_angle; /** Draw a tile on the screen: */ - static void draw(float x, float y, unsigned int c, Uint8 alpha = 255); -}; - -struct TileGroup -{ - std::string name; - std::vector tiles; -}; + 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; + } -class TileManager -{ - private: - TileManager(); - std::vector tiles; - static TileManager* instance_ ; - static std::vector* tilegroups_; - void load_tileset(std::string filename); - - public: - static TileManager* instance() { return instance_ ? instance_ : instance_ = new TileManager(); } - static std::vector* tilegroups() { return tilegroups_ ? tilegroups_ : tilegroups_ = new std::vector; } - Tile* get(unsigned int id) { - if(id < tiles.size()) - { - return tiles[id]; - } - else - { - // Never return 0, but return the 0th tile instead so that - // user code doesn't have to check for NULL pointers all over - // the place - return tiles[0]; - } + /// returns the height of the tiles in pixels + int getHeight() const + { + if(!images.size()) + return 0; + return images[0]->h; } }; #endif + +/* EOF */