#ifndef _ISCENE_H #define _ISCENE_H #include class RDPQGraphics; class SceneManager; class AnimationManager; class FontManager; class TransferPakManager; typedef struct Rectangle Rectangle; enum class SceneType { NONE, INIT_TRANSFERPAK, MENU, DISTRIBUTION_POKEMON_LIST, STATS, TEST, POKETRANSPORTER_GB_REF, SELECT_FILE, COPY_DATA, ABOUT }; typedef struct SceneDependencies { RDPQGraphics& gfx; AnimationManager& animationManager; FontManager& fontManager; TransferPakManager& tpakManager; SceneManager& sceneManager; char playerName[16]; uint8_t generation; uint8_t specificGenVersion; uint8_t localization; } SceneDependencies; class IScene { public: virtual ~IScene(); virtual void init() = 0; virtual void destroy() = 0; /** * @brief This function should implement the procedure of obtaining the relevant user input * and directing it as necessary, but it should not implement how to handle it. For the latter you should implement handleUserInput instead. */ virtual void processUserInput() = 0; virtual bool handleUserInput(joypad_port_t port, const joypad_inputs_t& inputs) = 0; virtual void render(RDPQGraphics& gfx, const Rectangle& sceneBounds) = 0; protected: private: }; #endif