#pragma once #ifndef ES_CORE_WINDOW_H #define ES_CORE_WInDOW_H #include "HelpPrompt.h" #include "InputConfig.h" #include "Settings.h" #include class FileData; class Font; class GuiComponent; class HelpComponent; class ImageComponent; class InputConfig; class TextCache; class Transform4x4f; struct HelpStyle; class Window { public: class ScreenSaver { public: virtual void startScreenSaver() = 0; virtual void stopScreenSaver() = 0; virtual void nextVideo() = 0; virtual void renderScreenSaver() = 0; virtual bool allowSleep() = 0; virtual void update(int deltaTime) = 0; virtual bool isScreenSaverActive() = 0; virtual FileData* getCurrentGame() = 0; virtual void launchGame() = 0; }; class InfoPopup { public: virtual void render(const Transform4x4f& parentTrans) = 0; virtual void stop() = 0; virtual ~InfoPopup() {}; }; class PassKeyListener { public: bool isUIModeChanged(InputConfig* config, Input input, Window* window); PassKeyListener() { mPassKeySequence = Settings::getInstance()->getString("UIMode_passkey"); mPassKeyCounter = 0; } private: std::string mPassKeySequence; int mPassKeyCounter; const std::vector mInputVals = { "up", "down", "left", "right", "a", "b", "x", "y" }; }; Window(); ~Window(); void pushGui(GuiComponent* gui); void removeGui(GuiComponent* gui); GuiComponent* peekGui(); inline int getGuiStackSize() { return mGuiStack.size(); } void textInput(const char* text); void input(InputConfig* config, Input input); void update(int deltaTime); void render(); bool init(unsigned int width = 0, unsigned int height = 0); void deinit(); void normalizeNextUpdate(); inline bool isSleeping() const { return mSleeping; } bool getAllowSleep(); void setAllowSleep(bool sleep); void renderLoadingScreen(); void renderHelpPromptsEarly(); // used to render HelpPrompts before a fade void setHelpPrompts(const std::vector& prompts, const HelpStyle& style); void setScreenSaver(ScreenSaver* screenSaver) { mScreenSaver = screenSaver; } void setInfoPopup(InfoPopup* infoPopup) { delete mInfoPopup; mInfoPopup = infoPopup; } inline void stopInfoPopup() { if (mInfoPopup) mInfoPopup->stop(); }; void startScreenSaver(); void cancelScreenSaver(); void renderScreenSaver(); private: void onSleep(); void onWake(); // Returns true if at least one component on the stack is processing bool isProcessing(); HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; ScreenSaver* mScreenSaver; InfoPopup* mInfoPopup; bool mRenderScreenSaver; PassKeyListener* mPassKeyListener; std::vector mGuiStack; std::vector< std::shared_ptr > mDefaultFonts; int mFrameTimeElapsed; int mFrameCountElapsed; int mAverageDeltaTime; std::unique_ptr mFrameDataText; bool mNormalizeNextUpdate; bool mAllowSleep; bool mSleeping; unsigned int mTimeSinceLastInput; bool mRenderedHelpPrompts; }; #endif // ES_CORE_WINDOW_H