-Added new object system and converted some GameObjects to it.
[supertux.git] / src / display_manager.h
1 #ifndef __DISPLAY_MANAGER_H__
2 #define __DISPLAY_MANAGER_H__
3
4 #include <vector>
5
6 #include "drawable.h"
7 #include "viewport.h"
8
9 // some constants for predefined layer values
10 enum {
11   LAYER_BACKGROUND0 = -300,
12   LAYER_BACKGROUND1 = -200,
13   LAYER_BACKGROUNDTILES = -100,
14   LAYER_TILES = 0,
15   LAYER_OBJECTS = 100,
16   LAYER_FOREGROUND0 = 200,
17   LAYER_FOREGROUND1 = 300
18 };
19
20 /** This class holds a list of all things that should be drawn to screen
21  */
22 class DisplayManager
23 {
24 public:
25   DisplayManager();
26   ~DisplayManager();
27   
28   /** adds an object to the list of stuff that should be drawn each frame.
29    * The layer argument specifies how early an object is drawn.
30    */
31   void add_drawable(Drawable* object, int layer);
32
33   void remove_drawable(Drawable* object);
34
35   void draw();
36
37   ViewPort& get_viewport()
38   { return viewport; }
39
40 private:
41   class DrawingQueueEntry {
42   public:
43     DrawingQueueEntry(Drawable* newobject, int newlayer)
44       : object(newobject), layer(newlayer)
45     { }
46
47     bool operator <(int olayer) const
48     {
49       return layer < olayer;
50     }
51
52     Drawable* object;
53     int layer;
54   };
55
56   typedef std::vector<DrawingQueueEntry> DisplayList;
57   DisplayList displaylist;
58   ViewPort viewport;
59 };
60
61 #endif
62