#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 DrawDefaultGameOverMenu(); void DrawDefaultGamePausedMenu(); 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 const char* s_dejavu_sans_filepath = "./fonts/dejavu_ttf/DejaVuSans.ttf"; static constexpr const char* s_dejavu_sans_mono_filepath = "./fonts/dejavu_ttf/DejaVuSansMono.ttf"; 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; };