X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flevel.h;h=ac503ed16e675e6eee92ecc017f00ed0f84f461b;hb=90b85c87d5da62881fcb51b1f1b6767beb50d11f;hp=264194b7ea6eaef22a65b42870160c10030af374;hpb=43ae91e84ae574464a2ff634daa8a16e253b47fa;p=supertux.git diff --git a/src/level.h b/src/level.h index 264194b7e..ac503ed16 100644 --- a/src/level.h +++ b/src/level.h @@ -1,41 +1,140 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2004 SuperTux Development Team, see AUTHORS for details // -// C Interface: level -// -// Description: -// -// -// Author: Tobias Glaesser , (C) 2003 -// -// 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 SUPERTUX_LEVEL_H #define SUPERTUX_LEVEL_H +#include #include "texture.h" +#include "badguy.h" +#include "lispreader.h" +#include "musicref.h" -#define LEVEL_NAME_MAX 20 +class Tile; -typedef struct st_level /*It is easier to read the sources IMHO, if we don't write something like int a,b,c; */ +/** This type holds meta-information about a level-subset. + It could be extended to handle manipulation of subsets. */ +class st_subset { - char name[LEVEL_NAME_MAX]; - char theme[100]; - char song_title[100]; - unsigned char* tiles[15]; - int time_left; - int bkgd_red; - int bkgd_green; - int bkgd_blue; - int width; - } st_level; - -texture_type img_bkgd[2][4], img_solid[4], img_brick[2]; + public: + st_subset(); + static void create(const std::string& subset_name); + void load(char *subset); + void save(); + void free(); + + std::string name; + std::string title; + std::string description; + Surface* image; + int levels; + + private: + void parse(lisp_object_t* cursor); + }; + +#define LEVEL_NAME_MAX 20 + + +enum TileMapType { + TM_BG, + TM_IA, + TM_FG + }; + +struct ResetPoint +{ + int x; + int y; +}; + +class Level +{ + public: + Surface* img_bkgd; + MusicRef level_song; + MusicRef level_song_fast; + + std::string name; + std::string author; + std::string theme; + std::string song_title; + std::string bkgd_image; + std::string particle_system; + std::vector bg_tiles[15]; /* Tiles in the background */ + std::vector ia_tiles[15]; /* Tiles which can interact in the game (solids for example)*/ + std::vector fg_tiles[15]; /* Tiles in the foreground */ + int time_left; + Color bkgd_top; + Color bkgd_bottom; + int width; + int start_pos_x; + int start_pos_y; + int endpos; + bool use_endsequence; + float gravity; + + std::vector badguy_data; + + /** A collection of points to which Tux can be reset after a lost live */ + std::vector reset_points; + public: + Level(); + Level(const std::string& subset, int level); + Level(const std::string& filename); + ~Level(); + + /** Will the Level structure with default values */ + void init_defaults(); -void loadlevel(st_level* plevel, char * subset, int level); -void loadlevelgfx(st_level* plevel); -void unloadlevelgfx(); -void load_level_image(texture_type* ptexture, char* theme, char * file, int use_alpha); -void level_change(st_level* plevel, float x, float y, unsigned char c); + /** Cleanup the level struct from allocated tile data and such */ + void cleanup(); + + /** Load data for this level: + Returns -1, if the loading of the level failed. */ + int load(const std::string& subset, int level); + + /** Load data for this level: + Returns -1, if the loading of the level failed. */ + int load(const std::string& filename); + + void load_gfx(); + void free_gfx(); + + void load_song(); + void free_song(); + MusicRef get_level_music(); + MusicRef get_level_music_fast(); + + void save(const char* subset, int level); + + /** Edit a piece of the map! */ + void change(float x, float y, int tm, unsigned int c); + + /** Resize the level to a new width */ + void change_size (int new_width); + + /** Return the id of the tile at position x/y */ + unsigned int gettileid(float x, float y); + + void load_image(Surface** ptexture, std::string theme, const char * file, int use_alpha); +}; #endif /*SUPERTUX_LEVEL_H*/