X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flevel.h;h=521c148453533081e7f64a604e0180eef8c0100b;hb=a773fb8a2e63ec07086f4a03b1e94340ea170c73;hp=4d9f14b42831bc3c1fcb6538621dc072b167ee69;hpb=20860a4723336805598595fe916ab2709490bc61;p=supertux.git diff --git a/src/level.h b/src/level.h index 4d9f14b42..521c14845 100644 --- a/src/level.h +++ b/src/level.h @@ -1,7 +1,7 @@ // // C Interface: level // -// Description: +// Description: // // // Author: Tobias Glaesser , (C) 2003 @@ -10,20 +10,83 @@ // // -typedef struct st_level /*It is easier to read the sources IMHO, if we don't write something like int a,b,c; */ +#ifndef SUPERTUX_LEVEL_H +#define SUPERTUX_LEVEL_H + +#include +#include "texture.h" +#include "badguy.h" +#include "lispreader.h" + +/* This type holds meta-information about a level-subset. */ +/* It could be extended to handle manipulation of subsets. */ +class st_subset { - char name[100]; - 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; + 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; + texture_type image; + int levels; + + private: + void parse(lisp_object_t* cursor); + }; + +#define LEVEL_NAME_MAX 20 + + +enum TileMapType { + TM_BG, + TM_IA, + TM_FG + }; + +extern texture_type img_bkgd; +extern texture_type img_bkgd_tile[2][4]; +extern texture_type img_solid[4]; +extern texture_type img_brick[2]; + +class st_level +{ + public: + std::string name; + std::string theme; + std::string song_title; + std::string bkgd_image; + std::string particle_system; + unsigned int* bg_tiles[15]; /* Tiles in the background */ + unsigned int* ia_tiles[15]; /* Tiles which can interact in the game (solids for example)*/ + unsigned int* fg_tiles[15]; /* Tiles in the foreground */ + int time_left; + int bkgd_red; + int bkgd_green; + int bkgd_blue; + int width; + float gravity; -void loadlevel(st_level* plevel, char * subset, int level); -SDL_Surface * load_level_image(char* theme, char * file, int use_alpha); + std::vector badguy_data; + public: +}; +void level_default (st_level* plevel); +int level_load (st_level* plevel, const char * subset, int level); +void level_parse (st_level* plevel, lisp_object_t* cursor); +int level_load (st_level* plevel, const char* filename); +void level_save (st_level* plevel, const char * subset, int level); +void level_free (st_level* plevel); +void level_load_gfx (st_level* plevel); +void level_change (st_level* plevel, float x, float y, int tm, unsigned int c); +void level_change_size (st_level* plevel, int new_width); +void level_load_song(st_level* plevel); +void level_free_gfx(); +void level_load_image(texture_type* ptexture, std::string theme, const char * file, int use_alpha); +void level_free_song(void); +#endif /*SUPERTUX_LEVEL_H*/