X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FMoof%2FEngine.hh;h=e42510d3d86af61744bab076f2186249e1e91e26;hb=bffc879fc8ee8167bb123310d39fad4e2f426ffd;hp=971d68fe1e28eb59e3536056dd19c4355ec0668c;hpb=bfa6212d09d8735d8fd5e2638188e4a99f21ada4;p=chaz%2Fyoink diff --git a/src/Moof/Engine.hh b/src/Moof/Engine.hh index 971d68f..e42510d 100644 --- a/src/Moof/Engine.hh +++ b/src/Moof/Engine.hh @@ -29,54 +29,59 @@ #ifndef _MOOF_ENGINE_HH_ #define _MOOF_ENGINE_HH_ -#include - #include -#include -#include +#include +#include #include -#include namespace Mf { -// forward declaration +// forward declarations class Video; -class Engine : public Singleton +class Engine { + class Impl; + boost::shared_ptr mImpl; + public: - Engine(int argc, char* argv[], const std::string& configFile, - const std::string& name, const std::string& iconFile); - virtual ~Engine(); - int run(); - void stop(int exitCode = 0); + Engine(int argc, char* argv[], const std::string& name, + const std::string& iconFile, const std::string& configFile); + ~Engine() {} + + // get global instance + static Engine& getInstance(); + + void run(); void setTimestep(Scalar ts); - Scalar getTimestep(); + Scalar getTimestep() const; void setMaxFrameRate(long maxFps); - long getMaxFrameRate(); + long getMaxFrameRate() const; - Video& getVideo(); - long getFrameRate(); + Video& getVideo() const; + long getFrameRate() const; - // Override these if you want. - virtual void update(Scalar t, Scalar dt); - virtual void draw(Scalar alpha); - virtual void handleEvent(const Event& event); + void push(LayerP layer); + LayerP pop(); + // pops a specific layer and all layers above it + LayerP pop(Layer* layer); + void clear(); - struct Exception : std::runtime_error + struct Exception : public Mf::Exception { - explicit Exception(const std::string& what_arg) : - std::runtime_error(what_arg) {} - }; + explicit Exception(unsigned error) : + Mf::Exception(error) {} -private: - class Impl; - boost::shared_ptr impl_; + void raise() + { + throw *this; + } + }; };