X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgame_session.hpp;h=ec3fffbe32667c7f0a1c0a11af9197136f913e9c;hb=98dfd58973cda2eebb77cdc0241d9a8c7c745371;hp=92a0b69875d583c45588100bf08c33735b3bb915;hpb=a113d3bd1feddd510e3b2852b0d42522735eee40;p=supertux.git diff --git a/src/game_session.hpp b/src/game_session.hpp index 92a0b6987..ec3fffbe3 100644 --- a/src/game_session.hpp +++ b/src/game_session.hpp @@ -21,12 +21,11 @@ #include #include +#include #include "screen.hpp" -#include "timer.hpp" -#include "statistics.hpp" #include "math/vector.hpp" -#include "console.hpp" #include "video/surface.hpp" +#include "object/endsequence.hpp" class Level; class Sector; @@ -36,8 +35,7 @@ class CodeController; class Menu; /** - * The GameSession class controlls the controll flow of the Game (the part - * where you actually play a level) + * Screen that runs a Level, where Players run and jump through Sectors. */ class GameSession : public Screen { @@ -62,7 +60,11 @@ public: void finish(bool win = true); void respawn(const std::string& sectorname, const std::string& spawnpointname); void set_reset_point(const std::string& sectorname, const Vector& pos); - void display_info_box(const std::string& text); + std::string get_reset_point_sectorname() + { return reset_sector; } + + Vector get_reset_point_pos() + { return reset_pos; } Sector* get_current_sector() { return currentsector; } @@ -78,22 +80,25 @@ public: * resources for the current level/world */ std::string get_working_directory(); - void restart_level(bool fromBeginning = true); + void restart_level(); void toggle_pause(); /** - * Allows adjusting the game speed with a factor. 1.0 means normal speed - * 0.0 means the game is stopped. + * Enters or leaves level editor mode + */ + void set_editmode(bool edit_mode = true); + + /** + * Forces all Players to enter ghost mode */ - void adjust_game_speed(float factor); + void force_ghost_mode(); private: void check_end_conditions(); void process_events(); void capture_demo_step(); - void levelintro(); void drawstatus(DrawingContext& context); void draw_pause(DrawingContext& context); @@ -101,7 +106,6 @@ private: void on_escape_press(); void process_menu(); - Timer endsequence_timer; std::auto_ptr level; std::auto_ptr statistics_backdrop; @@ -114,18 +118,10 @@ private: int levelnb; int pause_menu_frame; - /** If true the end_sequence will be played, user input will be - ignored while doing that */ - enum EndSequenceState { - NO_ENDSEQUENCE, - ENDSEQUENCE_RUNNING, // tux is running right - ENDSEQUENCE_WAITING // waiting for the end of the music - }; - EndSequenceState end_sequence; - float last_x_pos; - CodeController* end_sequence_controller; + EndSequence* end_sequence; - bool game_pause; + bool game_pause; + float speed_before_pause; std::string levelfile; @@ -133,9 +129,6 @@ private: std::string reset_sector; Vector reset_pos; - /// speed factos - float speed_factor; - // the sector and spawnpoint we should spawn after this frame std::string newsector; std::string newspawnpoint; @@ -152,6 +145,9 @@ private: 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 */ }; #endif /*SUPERTUX_GAMELOOP_H*/