X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.h;h=fa71bbce3b714d74249ae8a20dec5e026e131fda;hb=f00cab0c347263a82758e8c6799f28e80d6162f2;hp=f44ba506064c68736cfd0c97da02bd06a50adbd0;hpb=1db9b1a8cf477ba8a676eb2046342ae02c3d3b96;p=supertux.git diff --git a/src/worldmap.h b/src/worldmap.h index f44ba5060..fa71bbce3 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -16,7 +16,6 @@ // 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_WORLDMAP_H #define SUPERTUX_WORLDMAP_H @@ -26,9 +25,18 @@ #include "math/vector.h" #include "audio/musicref.h" #include "video/screen.h" +#include "lisp/lisp.h" +#include "control/controller.h" #include "statistics.h" -#include "special/timer.h" - +#include "timer.h" +#include "tile_manager.h" +#include "game_object.h" + +class Sprite; +class Menu; +class SpawnPoint; +class GameObject; +class TileMap; extern Menu* worldmap_menu; namespace WorldMapNS { @@ -36,7 +44,7 @@ namespace WorldMapNS { enum WorldMapMenuIDs { MNID_RETURNWORLDMAP, MNID_QUITWORLDMAP - }; +}; // For one way tiles enum { @@ -45,47 +53,6 @@ enum { SOUTH_NORTH_WAY, EAST_WEST_WAY, WEST_EAST_WAY - }; - -class Tile -{ -public: - Tile(); - ~Tile(); - - void draw(DrawingContext& context, Vector pos); - - std::vector images; - int anim_speed; - - // Directions in which Tux is allowed to walk from this tile - bool north; - bool east; - bool south; - bool west; - - /** One way tile */ - int one_way; - - /** Stop on this tile or walk over it? */ - bool stop; - - /** When set automatically turn directions when walked over such a - tile (ie. walk smoothly a curve) */ - bool auto_walk; -}; - -class TileManager -{ -private: - typedef std::vector Tiles; - Tiles tiles; - -public: - TileManager(); - ~TileManager(); - - Tile* get(int i); }; enum Direction { D_NONE, D_WEST, D_EAST, D_NORTH, D_SOUTH }; @@ -96,15 +63,14 @@ Direction reverse_dir(Direction d); class WorldMap; -class Tux +class Tux : public GameObject { public: Direction back_direction; private: WorldMap* worldmap; - Surface* largetux_sprite; - Surface* firetux_sprite; - Surface* smalltux_sprite; + Sprite* tux_sprite; + Controller* controller; Direction input_direction; Direction direction; @@ -119,8 +85,8 @@ public: Tux(WorldMap* worldmap_); ~Tux(); - void draw(DrawingContext& context, const Vector& offset); - void action(float elapsed_time); + void draw(DrawingContext& context); + void update(float elapsed_time); void set_direction(Direction dir); @@ -146,13 +112,10 @@ private: std::string name; std::string music; - std::vector tilemap; - int width; - int height; + typedef std::vector GameObjects; + GameObjects game_objects; + TileMap* solids; - int start_x; - int start_y; - TileManager* tile_manager; public: @@ -195,9 +158,8 @@ public: /** Check if this level should be vertically flipped */ bool vertical_flip; - /** Filename of the extro text to show once the level is - successfully completed */ - std::string extro_filename; + /** Script that is run when the level is successfully finished */ + std::string extro_script; /** Go to this world */ std::string next_worldmap; @@ -221,19 +183,22 @@ public: private: std::string map_filename; + std::string levels_path; typedef std::vector SpecialTiles; SpecialTiles special_tiles; - typedef std::vector Levels; Levels levels; + typedef std::vector SpawnPoints; + SpawnPoints spawn_points; MusicRef song; - bool enter_level; - Vector offset; std::string savegame_file; + + std::string intro_script; + bool intro_displayed; void get_level_title(Level& level); @@ -244,8 +209,6 @@ private: Statistics total_stats; void calculate_total_stats(); - Timer frame_timer; - public: WorldMap(); ~WorldMap(); @@ -257,14 +220,17 @@ public: void get_input(); + void add_object(GameObject* object); + void clear_objects(); + /** Update Tux position */ void update(float delta); /** Draw one frame */ - void draw(DrawingContext& context, const Vector& offset); + void draw(DrawingContext& context); Vector get_next_tile(Vector pos, Direction direction); - Tile* at(Vector pos); + const Tile* at(Vector pos); WorldMap::Level* at_level(); WorldMap::SpecialTile* at_special_tile(); @@ -282,19 +248,15 @@ public: void loadmap(const std::string& filename); const std::string& get_world_title() const - { return name; } + { return name; } - const int& get_start_x() const - { return start_x; } - - const int& get_start_y() const - { return start_y; } - void set_map_filename(std::string filename) - { map_filename = filename; } + { map_filename = filename; } private: void on_escape_press(); + void parse_special_tile(const lisp::Lisp* lisp); + void parse_level_tile(const lisp::Lisp* lisp); }; } // namespace WorldMapNS