// Cross-platform rendering and input interface. #ifndef PLATFORM_HPP #define PLATFORM_HPP #include <chrono> #include <functional> #include <unordered_set> #include "PixelBuffer.hpp" using FloatSeconds = std::chrono::duration<float>; class Platform { protected: FloatSeconds frame_time_prev = FloatSeconds(0.0f); public: static constexpr FloatSeconds FRAME_TIME_TARGET = FloatSeconds(1.0f / 60.0f); // Runs [func], then sleeps until one frame has elapsed. The default // implementation uses C++ standard library facilities. virtual void frame(std::function<void(FloatSeconds const &)> func); // Returns any keys currently pressed. virtual std::unordered_set<char> get_input(void) = 0; virtual void render(PixelBuffer const &buffer) = 0; virtual void set_title(std::string const &title); // More reliable than destructors. virtual void exit(); }; #endif // PLATFORM_HPP