X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flevel.h;h=7eb024807d9c398512b45dac55468c36cb222b53;hb=40e6e7cdc59c09befbd2595aea0c6e10428315d4;hp=28eb0b48998e4474fdac31fc9d55642b0f19655a;hpb=403f2652505e814b645892bffaf89a584984f9b8;p=supertux.git diff --git a/src/level.h b/src/level.h index 28eb0b489..7eb024807 100644 --- a/src/level.h +++ b/src/level.h @@ -21,136 +21,63 @@ #ifndef SUPERTUX_LEVEL_H #define SUPERTUX_LEVEL_H +#include #include -#include "texture.h" -#include "badguy.h" -#include "lispreader.h" -#include "musicref.h" -#include "gameobjs.h" - -class Tile; -class World; - -/** This type holds meta-information about a level-subset. - It could be extended to handle manipulation of subsets. */ -class LevelSubset - { - public: - LevelSubset(); - ~LevelSubset(); - - static void create(const std::string& subset_name); - void load(char *subset); - void save(); - - 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 +using namespace SuperTux; -enum TileMapType { - TM_BG, - TM_IA, - TM_FG - }; +class Sector; -struct ResetPoint -{ - int x; - int y; -}; +namespace lisp { +class Lisp; +} -class Level +class Level { - public: - Surface* img_bkgd; - MusicRef level_song; - MusicRef level_song_fast; +public: + enum EndSequenceType{ + NONE_ENDSEQ_ANIM, + FIREWORKS_ENDSEQ_ANIM + }; std::string name; std::string author; - std::string song_title; - std::string bkgd_image; - std::string particle_system; - std::vector bg_tiles; /* Tiles in the background */ - std::vector ia_tiles; /* Tiles which can interact in the game (solids for example)*/ - std::vector fg_tiles; /* Tiles in the foreground */ -// 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 height; - int bkgd_speed; - int start_pos_x; - int start_pos_y; - float gravity; - bool back_scrolling; - float hor_autoscroll_speed; - - /** A collection of points to which Tux can be reset after a lost live */ - std::vector reset_points; - public: + int timelimit; + typedef std::map Sectors; + Sectors sectors; + EndSequenceType end_sequence_type; + +public: Level(); - Level(const std::string& subset, int level, World* world); - Level(const std::string& filename, World* world); ~Level(); - /** Will the Level structure with default values */ - void init_defaults(); - - /** 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. - XXX the world parameter is a temporary hack - */ - int load(const std::string& subset, int level, World* world); - - /** Load data for this level: - Returns -1, if the loading of the level failed. - XXX the world parameter is a temporary hack - */ - int load(const std::string& filename, World* world); - - void load_gfx(); - - void load_song(); - void free_song(); - MusicRef get_level_music(); - MusicRef get_level_music_fast(); - - // XXX the world parameter is a temporary hack - void save(const std::string& subset, int level, World* world); - - /** Edit a piece of the map! */ - void change(float x, float y, int tm, unsigned int c); - - /** Resize the level to a new width/height */ - void resize(int new_width, int new_height); - - /* Draw background */ - void draw_bg(); - - /** Return the id of the tile at position x/y */ - unsigned int gettileid(float x, float y) const; - /** returns the id of the tile at position x,y - * (these are logical and not pixel coordinates) - */ - unsigned int get_tile_at(int x, int y) const; - - void load_image(Surface** ptexture, std::string theme, const char * file, int use_alpha); + // loads a levelfile + void load(const std::string& filename); + void save(const std::string& filename); + + EndSequenceType get_end_sequence_type() const + { return end_sequence_type; } + + const std::string& get_name() const + { return name; } + + const std::string& get_author() const + { return author; } + + void add_sector(Sector* sector); + + Sector* get_sector(const std::string& name); + + Sector* get_next_sector(const Sector* sector); + Sector* get_previous_sector(const Sector* sector); + + int get_total_sectors(); + + int get_total_badguys(); + int get_total_coins(); + +private: + void load_old_format(const lisp::Lisp& reader); }; #endif /*SUPERTUX_LEVEL_H*/