#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.
public Currenton<GameSession>
{
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);
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);
Level* get_current_level()
{ return level.get(); }
- PlayerStatus* get_player_status()
- { return player_status; }
-
void start_sequence(const std::string& sequencename);
/**
* resources for the current level/world
*/
std::string get_working_directory();
- int restart_level();
+ int restart_level(bool after_death = false);
void toggle_pause();
+ void abort_level();
/**
* Enters or leaves level editor mode
*/
void force_ghost_mode();
+ Savegame& get_savegame() { return m_savegame; }
+
private:
void check_end_conditions();
void process_events();
HSQUIRRELVM run_script(std::istream& in, const std::string& sourcename);
void on_escape_press();
- void process_menu();
std::unique_ptr<Level> level;
SurfacePtr statistics_backdrop;
int levelnb;
int pause_menu_frame;
- EndSequence* end_sequence;
+ std::shared_ptr<EndSequence> end_sequence;
bool game_pause;
float speed_before_pause;
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::unique_ptr<Menu> 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 */