X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FEngine.hh;h=07e982abd9ee4207478d077b8365cedc01897643;hp=84b1f588f57e41c55d5a185bec8e0d40abcca198;hb=a295f8def17036c8071b56e181364f99a377cae7;hpb=8a1acac01b444dccf8b57cedf08392ada2e473c1 diff --git a/src/Moof/Engine.hh b/src/Moof/Engine.hh index 84b1f58..07e982a 100644 --- a/src/Moof/Engine.hh +++ b/src/Moof/Engine.hh @@ -31,42 +31,63 @@ #include +#include +#include +#include #include -#include namespace Mf { -// forward declarations -class Video; +/** + * 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() {} - // get global instance - static Engine& getInstance(); + const Error& getError() const; - 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(int ts); + int getTimestep() const; + + void setMaxFps(int maxFps); // draw rate is always capped at the timestep + int getMaxFps() 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 +96,9 @@ private: }; +extern Engine engine; + + } // namespace Mf #endif // _MOOF_ENGINE_HH_