#pragma once #include "frontends/common2/speed.h" #include "frontends/libretro/environment.h" #include "linux/context.h" #include #include namespace ra2 { class RetroFrame; class Game { public: Game(); ~Game(); bool loadGame(const std::string & path); bool loadSnapshot(const std::string & path); void executeOneFrame(); void processInputEvents(); void drawVideoBuffer(); static void keyboardCallback(bool down, unsigned keycode, uint32_t character, uint16_t key_modifiers); static void frameTimeCallback(retro_usec_t usec); static constexpr size_t FPS = 60; static unsigned ourInputDevices[MAX_PADS]; static retro_usec_t ourFrameTime; private: const Logger myLogger; const std::shared_ptr myFrame; common2::Speed mySpeed; // fixed speed std::vector myButtonStates; bool checkButtonPressed(unsigned id); void keyboardEmulation(); static void processKeyDown(unsigned keycode, uint32_t character, uint16_t key_modifiers); static void processKeyUp(unsigned keycode, uint32_t character, uint16_t key_modifiers); }; }