]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Engine.hh
finally fixed broken main loop
[chaz/yoink] / src / Moof / Engine.hh
index 84b1f588f57e41c55d5a185bec8e0d40abcca198..28d7fa03eab8119d16a58ca5f2c81ad40da69ad5 100644 (file)
 
 #include <boost/shared_ptr.hpp>
 
+#include <Moof/Dispatch.hh>
+#include <Moof/Error.hh>
+#include <Moof/Video.hh>
 #include <Moof/Layer.hh>
-#include <Moof/Math.hh>
 
 
 namespace Mf {
 
 
-// forward declarations
-class Video;
+class Settings;
+
+
+/**
+ * The engine is essentially a stack of layers.  While running, it updates each
+ * layer from the bottom up every timestep.  It also draws each layer from the
+ * bottom up, adhering to the maximum frame-rate.  Events are sent to each layer
+ * from the top down until a layer signals the event was handled.  The engine is
+ * also responsible for firing timers on time.  The engine will continue running
+ * as long as there are layers on the stack.
+ */
 
 class Engine
 {
 public:
 
-       Engine(int argc, char* argv[], const std::string& name, 
-                       const std::string& iconFile, const std::string& configFile);
+       Engine();
        ~Engine() {}
+       
+       // loads settings: rngseed, timestep, framerate, showfps
+       bool initWithSettings(const Settings& settings);
 
-       // get global instance
-       static Engine& getInstance();
+       const Error& getError() const;
+       void clearError();
 
-       void run();
+       // setting the video is required before you can run the engine and should
+       // probably be done before adding any layers
+       void setVideo(VideoP video);
+       VideoP getVideo() const;
 
-       void setTimestep(Scalar ts);
-       Scalar getTimestep() const;
-       void setMaxFrameRate(long maxFps);
-       long getMaxFrameRate() const;
+       int getFps() const;
 
-       Video& getVideo() const;
-       long getFrameRate() const;
+       void push(LayerP layer);        // push a layer onto the top
+       LayerP pop();                           // pop the top layer
+       LayerP pop(Layer* layer);       // pops a specific layer and all layers above it
+       void clear();                           // remove all layers (the engine will stop)
 
-       void push(LayerP layer);
-       LayerP pop();
-       // pops a specific layer and all layers above it
-       LayerP pop(Layer* layer);
-       void clear();
+       int getSize() const;            // get the size of the stack
+
+       // set this machine in motion
+       void run();
+
+       Dispatch::Handler addHandler(const std::string& event,
+                       const Dispatch::Function& callback);
+       Dispatch::Handler addHandler(const std::string& event,
+                       const Dispatch::Function& callback, Dispatch::Handler handler);
+
+       void dispatch(const std::string& event,
+                       const Dispatch::Message* message = 0);
 
 private:
 
@@ -75,6 +97,9 @@ private:
 };
 
 
+extern Engine engine;
+
+
 } // namespace Mf
 
 #endif // _MOOF_ENGINE_HH_
This page took 0.017764 seconds and 4 git commands to generate.