UGDK
|
00001 #ifndef UGDK_ACTION_SCENE_H_ 00002 #define UGDK_ACTION_SCENE_H_ 00003 00004 #include <ugdk/portable/tr1.h> 00005 #include FROM_TR1(functional) 00006 #include <list> 00007 #include <queue> 00008 #include <map> 00009 #include <ugdk/action.h> 00010 #include <ugdk/audio.h> 00011 #include <ugdk/graphic.h> 00012 #include <ugdk/base/types.h> 00013 00014 namespace ugdk { 00015 00016 namespace action { 00017 00026 class Scene { 00027 public: 00028 Scene(); 00029 00030 virtual ~Scene(); 00031 00033 virtual void Focus(); 00034 00036 virtual void DeFocus(); 00037 00039 void AddEntity(Entity *entity); 00040 00042 void RemoveEntity(Entity *entity) { entities_.remove(entity); } 00043 00045 void QueuedAddEntity(Entity *entity) { queued_entities_.push(entity); } 00046 00047 void RemoveAllEntities(); 00048 00050 void AddTask(Task *task); 00051 00053 void Finish() { End(); finished_ = true; } 00054 00056 00059 void Update(double delta_t); 00060 00062 void StopsPreviousMusic(bool set) { stops_previous_music_ = set; } 00063 00067 bool finished() const { return finished_; } 00068 00069 graphic::Node* content_node() { return content_node_; } 00070 const graphic::Node* content_node() const { return content_node_; } 00071 graphic::Node* interface_node() { return interface_node_; } 00072 const graphic::Node* interface_node() const { return interface_node_; } 00073 00074 Music* background_music() const { return background_music_; } 00075 void set_background_music(Music* music) { background_music_ = music; } 00079 void set_defocus_callback(std::tr1::function<void (Scene*)> defocus_callback) { 00080 defocus_callback_ = defocus_callback; 00081 } 00082 void set_focus_callback(std::tr1::function<void (Scene*)> focus_callback) { 00083 focus_callback_ = focus_callback; 00084 } 00085 00086 protected: 00087 00089 00090 virtual void End(); 00091 00093 bool finished_; 00094 00096 Music* background_music_; 00097 00098 private: 00099 void UpdateEntities(double delta_t); 00100 void UpdateTasks(double delta_t); 00101 void DeleteToBeRemovedEntities(); 00102 void DeleteFinishedTasks(); 00103 void FlushEntityQueue(); 00104 00106 bool stops_previous_music_; 00107 00108 graphic::Node* content_node_; 00109 graphic::Node* interface_node_; 00110 00111 std::list<Entity*> entities_; 00112 std::queue<Entity*> queued_entities_; 00113 std::tr1::function<void (Scene*)> defocus_callback_; 00114 std::tr1::function<void (Scene*)> focus_callback_; 00115 00116 typedef std::map<int, std::list<Task*> > TasksContainer; 00117 TasksContainer tasks_; 00118 00119 friend class Engine; 00120 }; // class Scene. 00121 00122 } /* namespace action */ 00123 00124 } /* namespace ugdk */ 00125 00126 #endif /* UGDK_ACTION_SCENE_H_ */