#pragma once #include #include #include #include #include class Game { public: enum GameType { no_game, minesweeper, snake, tetris }; enum GameStatus { game_starting, game_resuming, game_over, game_paused, game_exit }; static std::unique_ptr Select(GameType type); Game() = default; virtual ~Game() = default; virtual bool Update(std::vector& events) = 0; protected: void DrawGameOverMenu(); void DrawGamePausedMenu(); float ProcessDt(); GameStatus m_game_status {game_starting}; float m_dt_remaining_seconds {0.0f}; uint64_t m_tlast_milliseconds {SDL_GetTicks()}; protected: static constexpr ImGuiWindowFlags s_imgui_window_flags_menu = ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_AlwaysAutoResize; static constexpr ImGuiWindowFlags s_imgui_window_flags_default = ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoScrollbar; };