1 // $Id: level.h 1032 2004-05-07 23:09:53Z rmcruz $ 2 // 3 // SuperTux 4 // Copyright (C) 2004 SuperTux Development Team, see AUTHORS for details 5 // 6 // This program is free software; you can redistribute it and/or 7 // modify it under the terms of the GNU General Public License 8 // as published by the Free Software Foundation; either version 2 9 // of the License, or (at your option) any later version. 10 // 11 // This program is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 // 16 // You should have received a copy of the GNU General Public License 17 // along with this program; if not, write to the Free Software 18 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 19 // 02111-1307, USA. 20 21 #ifndef SUPERTUX_LEVEL_H 22 #define SUPERTUX_LEVEL_H 23 24 #include <string> 25 #include "texture.h" 26 #include "badguy.h" 27 #include "lispreader.h" 28 #include "musicref.h" 29 30 class Tile; 31 32 /** This type holds meta-information about a level-subset. 33 It could be extended to handle manipulation of subsets. */ 34 class LevelSubset 35 { 36 public: 37 LevelSubset(); 38 ~LevelSubset(); 39 40 static void create(const std::string& subset_name); 41 void load(char *subset); 42 void save(); 43 44 std::string name; 45 std::string title; 46 std::string description; 47 Surface* image; 48 int levels; 49 50 private: 51 void parse(lisp_object_t* cursor); 52 }; 53 54 #define LEVEL_NAME_MAX 20 55 56 57 enum TileMapType { 58 TM_BG, 59 TM_IA, 60 TM_FG 61 }; 62 63 struct ResetPoint 64 { 65 int x; 66 int y; 67 }; 68 69 class Level 70 { 71 public: 72 Surface* img_bkgd; 73 MusicRef level_song; 74 MusicRef level_song_fast; 75 76 std::string name; 77 std::string author; 78 std::string song_title; 79 std::string bkgd_image; 80 std::string particle_system; 81 std::vector<unsigned int> bg_tiles[15]; /* Tiles in the background */ 82 std::vector<unsigned int> ia_tiles[15]; /* Tiles which can interact in the game (solids for example)*/ 83 std::vector<unsigned int> fg_tiles[15]; /* Tiles in the foreground */ 84 int time_left; 85 Color bkgd_top; 86 Color bkgd_bottom; 87 int width; 88 int bkgd_speed; 89 int start_pos_x; 90 int start_pos_y; 91 float gravity; 92 bool back_scrolling; 93 float hor_autoscroll_speed; 94 95 std::vector<BadGuyData> badguy_data; 96 97 /** A collection of points to which Tux can be reset after a lost live */ 98 std::vector<ResetPoint> reset_points; 99 public: 100 Level(); 101 Level(const std::string& subset, int level); 102 Level(const std::string& filename); 103 ~Level(); 104 105 /** Will the Level structure with default values */ 106 void init_defaults(); 107 108 /** Cleanup the level struct from allocated tile data and such */ 109 void cleanup(); 110 111 /** Load data for this level: 112 Returns -1, if the loading of the level failed. */ 113 int load(const std::string& subset, int level); 114 115 /** Load data for this level: 116 Returns -1, if the loading of the level failed. */ 117 int load(const std::string& filename); 118 119 void load_gfx(); 120 121 void load_song(); 122 void free_song(); 123 MusicRef get_level_music(); 124 MusicRef get_level_music_fast(); 125 126 void save(const std::string& subset, int level); 127 128 /** Edit a piece of the map! */ 129 void change(float x, float y, int tm, unsigned int c); 130 131 /** Resize the level to a new width */ 132 void change_size (int new_width); 133 134 /** Return the id of the tile at position x/y */ 135 unsigned int gettileid(float x, float y) const; 136 /** returns the id of the tile at position x,y 137 * (these are logical and not pixel coordinates) 138 */ 139 unsigned int get_tile_at(int x, int y) const; 140 141 void load_image(Surface** ptexture, std::string theme, const char * file, int use_alpha); 142 }; 143 144 #endif /*SUPERTUX_LEVEL_H*/ 145