converted player to new object system
[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_FOREGROUNDTILES = 200,
17   LAYER_FOREGROUND0 = 300,
18   LAYER_FOREGROUND1 = 400
19 };
20
21 /** This class holds a list of all things that should be drawn to screen
22  */
23 class DisplayManager
24 {
25 public:
26   DisplayManager();
27   ~DisplayManager();
28   
29   /** adds an object to the list of stuff that should be drawn each frame.
30    * The layer argument specifies how early an object is drawn.
31    */
32   void add_drawable(Drawable* object, int layer);
33
34   void remove_drawable(Drawable* object);
35
36   void draw();
37
38   ViewPort& get_viewport()
39   { return viewport; }
40
41 private:
42   class DrawingQueueEntry {
43   public:
44     DrawingQueueEntry(Drawable* newobject, int newlayer)
45       : object(newobject), layer(newlayer)
46     { }
47
48     bool operator <(int olayer) const
49     {
50       return layer < olayer;
51     }
52
53     Drawable* object;
54     int layer;
55   };
56
57   typedef std::vector<DrawingQueueEntry> DisplayList;
58   DisplayList displaylist;
59   ViewPort viewport;
60 };
61
62 #endif
63