X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftile.h;h=a94a19c36db043026e75c57410d58b41b3df88f6;hb=157cef71aeb9ae25b7bb90f37dda11bc09329d11;hp=fc15208179a0196e4b1155d0fe432f8789bf53b2;hpb=a337d4bb501ebe304a694aa4e0592a5201df481e;p=supertux.git diff --git a/src/tile.h b/src/tile.h index fc1520817..a94a19c36 100644 --- a/src/tile.h +++ b/src/tile.h @@ -1,33 +1,52 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2004 Tobias Glaesser // -// C++ Interface: tile -// -// Description: -// -// -// Author: Tobias Glaesser , (C) 2004 -// -// Copyright: See COPYING file that comes with this distribution -// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. // +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// 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 TILE_H #define TILE_H +#include +#include #include #include "texture.h" #include "globals.h" #include "lispreader.h" #include "setup.h" +#include "vector.h" /** Tile Class */ -struct Tile +class Tile { +public: + Tile(); + ~Tile(); + int id; - std::vector images; + std::vector images; + std::vector editor_images; + std::vector filenames; - + std::vector editor_filenames; + /** solid tile that is indestructable by Tux */ bool solid; @@ -37,12 +56,25 @@ struct Tile /** 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) */ int data; @@ -51,20 +83,46 @@ struct Tile int next_tile; int anim_speed; - unsigned char alpha; + + /** 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) + { + draw(pos.x, pos.y, c, alpha); + } }; +struct TileGroup +{ + friend bool operator<(const TileGroup& lhs, const TileGroup& rhs) + { return lhs.name < rhs.name; }; + friend bool operator>(const TileGroup& lhs, const TileGroup& rhs) + { return lhs.name > rhs.name; }; + + std::string name; + std::vector tiles; +}; class TileManager { private: TileManager(); + ~TileManager(); + std::vector tiles; static TileManager* instance_ ; + static std::set* tilegroups_; void load_tileset(std::string filename); + + std::string current_tileset; public: static TileManager* instance() { return instance_ ? instance_ : instance_ = new TileManager(); } + static void destroy_instance() { delete instance_; instance_ = 0; } + + static std::set* tilegroups() { if(!instance_) { instance_ = new TileManager(); } return tilegroups_ ? tilegroups_ : tilegroups_ = new std::set; } Tile* get(unsigned int id) { if(id < tiles.size()) { @@ -80,6 +138,4 @@ class TileManager } }; - - #endif