Engine
// Top level control. Engine usage must be after the API is created and before the API is destroyed.
class Engine : public EngCfg
{
public:
// Check if display was resized this frame.
RVAPI bool IsResize() const;
// Check if currently in full screen mode.
RVAPI bool IsFullScreen() const;
// Get global.
RVAPI static Engine &GetGlobal();
// Get monitor count.
RVAPI uint GetMonitorCount() const;
// Get window rectangle.
RVAPI B2i GetWindowRect() const;
// Get elapsed seconds since last frame.
RVAPI double GetElapsed() const;
// Get current scene.
template<typename K = Scene>
K &GetScene() const { return *(K *)scene(); }
// Start engine.
RVAPI void Start();
// Allocate scene memory. Usage: new (engine.AllocScene<SceneType>()) SceneType().
template<typename K = Scene>
void *AllocScene() { return scene.Alloc<K>(); }
// Constructor.
RVAPI Engine();
// Destructor.
RVAPI ~Engine();
private:
SafePtr<Scene> scene;
};
inline Engine &ENG() { return Engine::GetGlobal(); }
template<typename K = Scene>
K &SCN() { return (K &)(ENG().GetScene()); }
template<typename K = Overlay>
K &OVL() { return (K &)(ENG().GetScene().GetOverlay()); }