#ifndef _MOOF_ENGINE_HH_
#define _MOOF_ENGINE_HH_
-#include <stdexcept>
-
#include <boost/shared_ptr.hpp>
-#include <Moof/Dispatcher.hh>
-#include <Moof/Event.hh>
-#include <Moof/Exception.hh>
+#include <Moof/Layer.hh>
#include <Moof/Math.hh>
namespace Mf {
-// forward declaration
+// forward declarations
class Video;
class Engine
{
-protected:
-
- Engine(int argc, char* argv[], const std::string& configFile,
- const std::string& name, const std::string& iconFile);
-
public:
- virtual ~Engine();
+ Engine(int argc, char* argv[], const std::string& name,
+ const std::string& iconFile, const std::string& configFile);
+ ~Engine() {}
- int run();
- void stop(int exitCode = 0);
+ // get global instance
+ static Engine& getInstance();
+
+ void run();
void setTimestep(Scalar ts);
- Scalar getTimestep();
+ Scalar getTimestep() const;
void setMaxFrameRate(long maxFps);
- long getMaxFrameRate();
-
- Video& getVideo();
- long getFrameRate();
-
- // override these if you want
- virtual void update(Scalar t, Scalar dt);
- virtual void draw(Scalar alpha);
- virtual void handleEvent(const Event& event);
+ long getMaxFrameRate() const;
- struct Exception : public Mf::Exception
- {
- explicit Exception(unsigned error) :
- Mf::Exception(error) {}
+ Video& getVideo() const;
+ long getFrameRate() const;
- void raise()
- {
- throw *this;
- }
- };
+ void push(LayerP layer);
+ LayerP pop();
+ // pops a specific layer and all layers above it
+ LayerP pop(Layer* layer);
+ void clear();
private:
- Engine() {} // this class must be subclassed to be useful
class Impl;
- boost::shared_ptr<Impl> impl_;
+ boost::shared_ptr<Impl> mImpl;
};