X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FEngine.hh;h=28d7fa03eab8119d16a58ca5f2c81ad40da69ad5;hp=0617b1a5c3094025331233fe4c8ced0a5742010e;hb=4f62ce947db282f0bbf4d49b3aafb83d7cf51adc;hpb=57b78ebe21b1b48acd337daa5a1cb8c383959cfa diff --git a/src/Moof/Engine.hh b/src/Moof/Engine.hh index 0617b1a..28d7fa0 100644 --- a/src/Moof/Engine.hh +++ b/src/Moof/Engine.hh @@ -29,67 +29,77 @@ #ifndef _MOOF_ENGINE_HH_ #define _MOOF_ENGINE_HH_ -#include - #include -#include -#include -#include +#include +#include +#include +#include namespace Mf { -// forward declaration -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 { -protected: +public: - Engine(int argc, char* argv[], const std::string& configFile, - const std::string& name, const std::string& iconFile); + Engine(); + ~Engine() {} + + // loads settings: rngseed, timestep, framerate, showfps + bool initWithSettings(const Settings& settings); -public: + const Error& getError() const; + void clearError(); - virtual ~Engine(); + // 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; - int run(); - void stop(int exitCode = 0); + int getFps() const; - void setTimestep(Scalar ts); - Scalar getTimestep(); - void setMaxFrameRate(long maxFps); - long getMaxFrameRate(); + 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) - Video& getVideo(); - long getFrameRate(); + int getSize() const; // get the size of the stack - // override these if you want - virtual void update(Scalar t, Scalar dt); - virtual void draw(Scalar alpha); - virtual void handleEvent(const Event& event); + // set this machine in motion + void run(); - struct Exception : public Mf::Exception - { - explicit Exception(unsigned error) : - Mf::Exception(error) {} + 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 raise() - { - throw *this; - } - }; + void dispatch(const std::string& event, + const Dispatch::Message* message = 0); private: - Engine() {} // this class must be subclassed to be useful class Impl; - boost::shared_ptr impl_; + boost::shared_ptr mImpl; }; +extern Engine engine; + + } // namespace Mf #endif // _MOOF_ENGINE_HH_