X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flevel.h;h=dfb1c1e09b2a62cc8afd677fa7a8727e98cc5a49;hb=aadd77c676baae31db931c8e64cd1713c24289d5;hp=27c94a7f42a9a91cf42a50a8df4d4a5c874a26ad;hpb=cf865a9388d9dce0422510c5369a2471191d1299;p=supertux.git diff --git a/src/level.h b/src/level.h index 27c94a7f4..dfb1c1e09 100644 --- a/src/level.h +++ b/src/level.h @@ -1,7 +1,7 @@ // // C Interface: level // -// Description: +// Description: // // // Author: Tobias Glaesser , (C) 2003 @@ -13,50 +13,99 @@ #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. */ -typedef struct st_subset +class Tile; + +/** This type holds meta-information about a level-subset. + It could be extended to handle manipulation of subsets. */ +class st_subset { - char *name; - char *title; - char *description; + 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; - } st_subset; + + private: + void parse(lisp_object_t* cursor); + }; -void subset_init(st_subset* st_subset); -void subset_load(st_subset* st_subset, char *subset); -void subset_free(st_subset* st_subset); - #define LEVEL_NAME_MAX 20 -typedef struct st_level /*It is easier to read the sources IMHO, if we don't write something like int a,b,c; */ - { - char name[LEVEL_NAME_MAX]; - char theme[100]; - char song_title[100]; - char bkgd_image[100]; - unsigned char* tiles[15]; - int time_left; - int bkgd_red; - int bkgd_green; - int bkgd_blue; - int width; - float gravity; - } st_level; + +enum TileMapType { + TM_BG, + TM_IA, + TM_FG + }; + +class Level +{ + public: + texture_type img_bkgd; + + 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; + + std::vector badguy_data; + public: + /** Will the Level structure with default values */ + void init_defaults(); -extern texture_type img_bkgd, img_bkgd_tile[2][4], img_solid[4], img_brick[2]; + /** 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 char* 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(); -int level_load(st_level* plevel, char * subset, int level); -void level_save(st_level* plevel, char * subset, int level); -void level_free(st_level* plevel); -void level_load_gfx(st_level* plevel); -void level_free_gfx(); -void level_load_image(texture_type* ptexture, char* theme, char * file, int use_alpha); -void level_change(st_level* plevel, float x, float y, unsigned char c); -void level_load_song(st_level* plevel); -void level_free_song(void); + void load_song(); + void free_song(); + + 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 free_gfx(); + + void load_image(texture_type* ptexture, std::string theme, const char * file, int use_alpha); +}; + #endif /*SUPERTUX_LEVEL_H*/