UGDK
src/ugdk/action/scene.h
Go to the documentation of this file.
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_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines