UGDK  0.4.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
scene.h
Go to the documentation of this file.
1 #ifndef UGDK_ACTION_SCENE_H_
2 #define UGDK_ACTION_SCENE_H_
3 
4 #include <ugdk/portable/tr1.h>
5 #include FROM_TR1(functional)
6 #include <list>
7 #include <queue>
8 #include <map>
9 #include <ugdk/action.h>
10 #include <ugdk/audio.h>
11 #include <ugdk/graphic.h>
12 #include <ugdk/base/types.h>
13 
14 namespace ugdk {
15 
16 namespace action {
17 
26 class Scene {
27  public:
28  Scene();
29 
30  virtual ~Scene();
31 
33  virtual void Focus();
34 
36  virtual void DeFocus();
37 
39  void AddEntity(Entity *entity);
40 
42  void RemoveEntity(Entity *entity) { entities_.remove(entity); }
43 
45  void QueuedAddEntity(Entity *entity) { queued_entities_.push(entity); }
46 
47  void RemoveAllEntities();
48 
50  void AddTask(Task *task);
51 
53  void Finish() { End(); finished_ = true; }
54 
56 
59  void Update(double delta_t);
60 
62  void StopsPreviousMusic(bool set) { stops_previous_music_ = set; }
63 
67  bool finished() const { return finished_; }
68 
69  graphic::Node* content_node() { return content_node_; }
70  const graphic::Node* content_node() const { return content_node_; }
71  graphic::Node* interface_node() { return interface_node_; }
72  const graphic::Node* interface_node() const { return interface_node_; }
73 
75  void set_background_music(Music* music) { background_music_ = music; }
79  void set_defocus_callback(std::tr1::function<void (Scene*)> defocus_callback) {
80  defocus_callback_ = defocus_callback;
81  }
82  void set_focus_callback(std::tr1::function<void (Scene*)> focus_callback) {
83  focus_callback_ = focus_callback;
84  }
85 
86  protected:
87 
89 
90  virtual void End();
91 
93  bool finished_;
94 
97 
98  private:
99  void UpdateEntities(double delta_t);
100  void UpdateTasks(double delta_t);
101  void DeleteToBeRemovedEntities();
102  void DeleteFinishedTasks();
103  void FlushEntityQueue();
104 
106  bool stops_previous_music_;
107 
108  graphic::Node* content_node_;
109  graphic::Node* interface_node_;
110 
111  std::list<Entity*> entities_;
112  std::queue<Entity*> queued_entities_;
113  std::tr1::function<void (Scene*)> defocus_callback_;
114  std::tr1::function<void (Scene*)> focus_callback_;
115 
116  typedef std::map<int, std::list<Task*> > TasksContainer;
117  TasksContainer tasks_;
118 
119  friend class Engine;
120 }; // class Scene.
121 
122 } /* namespace action */
123 
124 } /* namespace ugdk */
125 
126 #endif /* UGDK_ACTION_SCENE_H_ */