- Refactored worldmap a bit to reuse GameObject from the rest of the game
[supertux.git] / src / level.h
index 8ba3fd0..18d1803 100644 (file)
 #ifndef SUPERTUX_LEVEL_H
 #define SUPERTUX_LEVEL_H
 
+#include <vector>
 #include <string>
-#include "texture.h"
-#include "badguy.h"
-#include "lispreader.h"
-#include "musicref.h"
 
-class Tile;
+class Sector;
 
-/** This type holds meta-information about a level-subset. 
-    It could be extended to handle manipulation of subsets. */
-class LevelSubset
-  {
-  public:
-    LevelSubset();
-    ~LevelSubset();
+namespace lisp {
+class Lisp;
+}
 
-    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
+class Level
 {
-  int x;
-  int y;
-};
-
-class Level 
-{
- public:
-  Surface* img_bkgd;
-  MusicRef level_song;
-  MusicRef level_song_fast;
-
+public:
   std::string name;
   std::string author;
-  std::string theme;
-  std::string song_title;
-  std::string bkgd_image;
-  std::string particle_system;
-  std::vector<unsigned int> bg_tiles[15]; /* Tiles in the background */
-  std::vector<unsigned int> ia_tiles[15]; /* Tiles which can interact in the game (solids for example)*/
-  std::vector<unsigned int> 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;
-  float gravity;
-  bool back_scrolling;
+  typedef std::vector<Sector*> Sectors;
+  Sectors sectors;
 
-  std::vector<BadGuyData> badguy_data;
-
-  /** A collection of points to which Tux can be reset after a lost live */
-  std::vector<ResetPoint> reset_points;
- public:
+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();
-  
-  /** 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);
+  // loads a levelfile
+  void load(const std::string& filename);
+  void save(const std::string& filename);
 
-  /** Load data for this level: 
-      Returns -1, if the loading of the level failed. */
-  int  load(const std::string& filename);
+  const std::string& get_name() const
+  { return name; }
 
-  void load_gfx();
-  
-  void load_song();
-  void free_song();
-  MusicRef get_level_music();
-  MusicRef get_level_music_fast();
+  const std::string& get_author() const
+  { return author; }
 
-  void save(const std::string& subset, int level);
+  void add_sector(Sector* sector);
 
-  /** Edit a piece of the map! */
-  void change(float x, float y, int tm, unsigned int c);
+  Sector* get_sector(const std::string& name);
 
-  /** Resize the level to a new width */
-  void change_size (int new_width);
+  size_t get_sector_count();
+  Sector* get_sector(size_t num);
 
-  /** 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;
+  int get_total_badguys();
+  int get_total_coins();
 
-  void load_image(Surface** ptexture, std::string theme, const char * file, int use_alpha);
+private:
+  void load_old_format(const lisp::Lisp& reader);
 };
 
 #endif /*SUPERTUX_LEVEL_H*/