X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgame_session.hpp;h=bed98b2fd290ce77707b5eb50a5d32673417985c;hb=07ddaed2a657e4d2a3d038fed223fc5827159caf;hp=fced5d2d1d6855aaa79ac0741ded9506d25ec8b4;hpb=9e5732a3c816561abfa93882860eb4a3e8e104c1;p=supertux.git diff --git a/src/game_session.hpp b/src/game_session.hpp index fced5d2d1..bed98b2fd 100644 --- a/src/game_session.hpp +++ b/src/game_session.hpp @@ -1,9 +1,7 @@ // $Id$ -// +// // SuperTux -// Copyright (C) 2004 Bill Kendrick -// Tobias Glaesser -// Ingo Ruhnke +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -14,7 +12,7 @@ // 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. @@ -23,10 +21,12 @@ #include #include +#include "screen.hpp" #include "timer.hpp" #include "statistics.hpp" #include "math/vector.hpp" #include "console.hpp" +#include "video/surface.hpp" /* GameLoop modes */ enum GameSessionMode { @@ -50,32 +50,28 @@ class Statistics; class DrawingContext; class CodeController; -/** The GameSession class controlls the controll flow of a World, ie. - present the menu on specifc keypresses, render and update it while - keeping the speed and framerate sane, etc. */ -class GameSession +/** + * The GameSession class controlls the controll flow of the Game (the part + * where you actually play a level) + */ +class GameSession : public Screen, public ConsoleCommandReceiver { public: - enum ExitStatus { ES_NONE, ES_LEVEL_FINISHED, ES_GAME_OVER, ES_LEVEL_ABORT }; - -public: - DrawingContext* context; - GameSession(const std::string& levelfile, GameSessionMode mode, - Statistics* statistics=0); + Statistics* statistics = NULL); ~GameSession(); - /** Enter the busy loop */ - ExitStatus run(); - void record_demo(const std::string& filename); void play_demo(const std::string& filename); - void draw(); + + void draw(DrawingContext& context); void update(float frame_ratio); + void setup(); void set_current() { current_ = this; } - static GameSession* current() { return current_; } + static GameSession* current() + { return current_; } /// ends the current level void finish(bool win = true); @@ -84,24 +80,24 @@ public: void set_reset_point(const std::string& sectorname, const Vector& pos); void display_info_box(const std::string& text); + Sector* get_current_sector() { return currentsector; } Level* get_current_level() - { return level; } + { return level.get(); } void start_sequence(const std::string& sequencename); - /// called by JoystickKeyboardController after an ascii key has been pressed - void try_cheats(); /** returns the "working directory" usually this is the directory where the * currently played level resides. This is used when locating additional * resources for the current level/world */ std::string get_working_directory(); - + bool consoleCommand(std::string command, std::vector arguments); /**< callback from Console; return false if command was unknown, true otherwise */ + private: - void restart_level(); + void restart_level(bool fromBeginning = true); void check_end_conditions(); void process_events(); @@ -109,15 +105,15 @@ private: void levelintro(); void drawstatus(DrawingContext& context); - void drawendscreen(); - void drawresultscreen(); - void draw_pause(); + void draw_pause(DrawingContext& context); void on_escape_press(); void process_menu(); Timer endsequence_timer; - Level* level; + std::auto_ptr level; + std::auto_ptr statistics_backdrop; + Sector* currentsector; GameSessionMode mode; @@ -151,19 +147,12 @@ private: static GameSession* current_; Statistics* best_level_statistics; - ExitStatus exit_status; std::ostream* capture_demo_stream; std::string capture_file; std::istream* playback_demo_stream; CodeController* demo_controller; - Console* console; }; -std::string slotinfo(int slot); - -/** Return true if the gameloop() was entered, false otherwise */ -bool process_load_game_menu(); - #endif /*SUPERTUX_GAMELOOP_H*/