dedcfac70d7e010357ed44b21fea95899e77546d
[supertux.git] / src / gameloop.h
1 /*
2   gameloop.h
3   
4   Super Tux - Game Loop!
5   
6   by Bill Kendrick & Tobias Glaesser <tobi.web@gmx.de>
7   bill@newbreedsoftware.com
8   http://www.newbreedsoftware.com/supertux/
9   
10   April 11, 2000 - March 15, 2004
11 */
12
13 #ifndef SUPERTUX_GAMELOOP_H
14 #define SUPERTUX_GAMELOOP_H
15
16 #include "sound.h"
17 #include "type.h"
18 #include "level.h"
19 #include "world.h"
20
21 /* GameLoop modes */
22
23 #define ST_GL_PLAY 0
24 #define ST_GL_TEST 1
25 #define ST_GL_LOAD_GAME 2
26 #define ST_GL_LOAD_LEVEL_FILE  3
27
28 extern int game_started;
29
30 class World;
31
32 /** The GameSession class controlls the controll flow of a World, ie.
33     present the menu on specifc keypresses, render and update it while
34     keeping the speed and framerate sane, etc. */
35 class GameSession
36 {
37  private:
38   bool quit;
39   timer_type fps_timer, frame_timer;
40   World* world;
41
42  public:
43   GameSession();
44   GameSession(const std::string& filename);
45   GameSession(const std::string& subset, int levelnb, int mode);
46   
47   int  run();
48   void draw();
49   int  action();
50   void process_events();
51
52   Level* get_level() { return world->get_level(); }
53   World* get_world() { return world; }
54
55   void  savegame(int slot);
56   void  loadgame(int slot);
57
58   static GameSession* current() { return current_; }
59  private:
60   static GameSession* current_;
61
62   void levelintro();
63   void start_timers();
64 };
65
66 std::string slotinfo(int slot);
67
68 bool rectcollision(base_type* one, base_type* two);
69 void bumpbrick(float x, float y);
70
71 #endif /*SUPERTUX_GAMELOOP_H*/
72