X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flevel.h;h=1f2fe9486c5efc35f1d50f7a593adff71470f7e5;hb=c2b5367f6f1d24f84ea26da553245128f241690e;hp=4ef9b4e76ea2965fae4cf672493a83ccdc2d2c41;hpb=f421158b0b58289fe29698bb45204df451014d59;p=supertux.git diff --git a/src/level.h b/src/level.h index 4ef9b4e76..1f2fe9486 100644 --- a/src/level.h +++ b/src/level.h @@ -1,14 +1,22 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2004 SuperTux Development Team, see AUTHORS for details // -// C Interface: level -// -// Description: -// -// -// Author: Tobias Glaesser , (C) 2003 -// -// Copyright: See COPYING file that comes with this distribution -// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. // +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. #ifndef SUPERTUX_LEVEL_H #define SUPERTUX_LEVEL_H @@ -17,24 +25,28 @@ #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 st_subset +class LevelSubset { public: - st_subset(); + LevelSubset(); + ~LevelSubset(); + 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; + Surface* image; int levels; private: @@ -50,60 +62,89 @@ enum TileMapType { TM_FG }; -extern texture_type img_bkgd; -extern texture_type img_bkgd_tile[2][4]; -extern texture_type img_solid[4]; -extern texture_type img_brick[2]; +struct ResetPoint +{ + int x; + int y; +}; -class st_level +class Level { public: + Surface* img_bkgd; + MusicRef level_song; + MusicRef level_song_fast; + std::string name; - std::string theme; + std::string author; 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 */ + 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; - int bkgd_red; - int bkgd_green; - int bkgd_blue; + Color bkgd_top; + Color bkgd_bottom; int width; + int height; + int bkgd_speed; + Vector start_pos; float gravity; - std::vector badguy_data; + /** A collection of points to which Tux can be reset after a lost live */ + std::vector reset_points; 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(); - int load(const char * subset, int level); -}; + /** 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); -int level_load (st_level* plevel, const char* filename); -void level_save (st_level* plevel, const char * subset, int level); -void level_load_gfx (st_level* plevel); -void level_change (st_level* plevel, float x, float y, int tm, unsigned int c); -void level_change_size (st_level* plevel, int new_width); -void level_load_song(st_level* plevel); -void level_free_gfx(); -void level_load_image(texture_type* ptexture, std::string theme, const char * file, int use_alpha); -void level_free_song(void); - -/** Return the id of the tile at the given x/y coordinates */ -unsigned int gettileid(float x, float y); - -/** Return a pointer to the tile at the given x/y coordinates */ -Tile* gettile(float x, float y); - -// Some little helper function to check for tile properties -bool issolid(float x, float y); -bool isbrick(float x, float y); -bool isice(float x, float y); -bool isfullbox(float x, float y); + /** 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); + + /** 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); +}; #endif /*SUPERTUX_LEVEL_H*/