X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Fgame_session.hpp;h=0499e2d32e8490edbe114353f9a212c08892b19a;hb=8e52a5b000d732e96b1cc461163c4778b434dc27;hp=22160a39b733bea4be0ce32b6742ec422030613c;hpb=42de210bd2cb0e773ce0b7bd6af7bb3f456030bc;p=supertux.git diff --git a/src/supertux/game_session.hpp b/src/supertux/game_session.hpp index 22160a39b..0499e2d32 100644 --- a/src/supertux/game_session.hpp +++ b/src/supertux/game_session.hpp @@ -23,16 +23,18 @@ #include "object/endsequence.hpp" #include "supertux/screen.hpp" +#include "supertux/player_status.hpp" #include "util/currenton.hpp" #include "video/surface.hpp" +class CodeController; +class DrawingContext; class Level; +class Menu; +class PlayerStatus; class Sector; class Statistics; -class PlayerStatus; -class DrawingContext; -class CodeController; -class Menu; +class Savegame; /** * Screen that runs a Level, where Players run and jump through Sectors. @@ -41,7 +43,7 @@ class GameSession : public Screen, public Currenton { public: - GameSession(const std::string& levelfile, PlayerStatus* player_status, Statistics* statistics = NULL); + GameSession(const std::string& levelfile, Savegame& savegame, Statistics* statistics = NULL); ~GameSession(); void record_demo(const std::string& filename); @@ -50,7 +52,8 @@ public: void draw(DrawingContext& context); void update(float frame_ratio); - void setup(); + void setup() override; + void leave() override; /// ends the current level void finish(bool win = true); @@ -68,9 +71,6 @@ public: Level* get_current_level() { return level.get(); } - PlayerStatus* get_player_status() - { return player_status; } - void start_sequence(const std::string& sequencename); /** @@ -79,9 +79,10 @@ public: * resources for the current level/world */ std::string get_working_directory(); - void restart_level(); + int restart_level(bool after_death = false); void toggle_pause(); + void abort_level(); /** * Enters or leaves level editor mode @@ -93,6 +94,8 @@ public: */ void force_ghost_mode(); + Savegame& get_savegame() { return m_savegame; } + private: void check_end_conditions(); void process_events(); @@ -103,9 +106,8 @@ private: HSQUIRRELVM run_script(std::istream& in, const std::string& sourcename); void on_escape_press(); - void process_menu(); - std::auto_ptr level; + std::unique_ptr level; SurfacePtr statistics_backdrop; // scripts @@ -117,7 +119,7 @@ private: int levelnb; int pause_menu_frame; - EndSequence* end_sequence; + std::shared_ptr end_sequence; bool game_pause; float speed_before_pause; @@ -133,20 +135,23 @@ private: std::string newspawnpoint; Statistics* best_level_statistics; - PlayerStatus* player_status; + Savegame& m_savegame; std::ostream* capture_demo_stream; std::string capture_file; std::istream* playback_demo_stream; CodeController* demo_controller; - std::auto_ptr game_menu; - float play_time; /**< total time in seconds that this session ran interactively */ bool edit_mode; /**< true if GameSession runs in level editor mode */ bool levelintro_shown; /**< true if the LevelIntro screen was already shown */ + int coins_at_start; /** How many coins does the player have at the start */ + BonusType bonus_at_start; /** What bonuses does the player have at the start */ + int max_fire_bullets_at_start; /** How many fire bullets does the player have */ + int max_ice_bullets_at_start; /** How many ice bullets does the player have */ + private: GameSession(const GameSession&); GameSession& operator=(const GameSession&);