#ifndef SUPERTUX_LEVEL_H
#define SUPERTUX_LEVEL_H
#include <string>
#include "texture.h"
#include "badguy.h"
#include "lispreader.h"
#include "musicref.h"
class Tile;
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
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 song_title;
std::string bkgd_image;
std::string particle_system;
std::vector<unsigned int> bg_tiles[15];
std::vector<unsigned int> ia_tiles[15];
std::vector<unsigned int> fg_tiles[15];
int time_left;
Color bkgd_top;
Color bkgd_bottom;
int width;
int bkgd_speed;
int start_pos_x;
int start_pos_y;
float gravity;
bool back_scrolling;
float hor_autoscroll_speed;
std::vector<BadGuyData> badguy_data;
std::vector<ResetPoint> reset_points;
public:
Level();
Level(const std::string& subset, int level);
Level(const std::string& filename);
~Level();
void init_defaults();
void cleanup();
int load(const std::string& subset, int level);
int load(const std::string& filename);
void load_gfx();
void load_song();
void free_song();
MusicRef get_level_music();
MusicRef get_level_music_fast();
void save(const std::string& subset, int level);
void change(float x, float y, int tm, unsigned int c);
void change_size (int new_width);
unsigned int gettileid(float x, float y) const;
unsigned int get_tile_at(int x, int y) const;
void load_image(Surface** ptexture, std::string theme, const char * file, int use_alpha);
};
#endif