#pragma once #include #include #include #include class Tetris : public Game { public: Tetris(); bool Update(std::vector &events) override; void HandleTetrominoPlacement(); private: void Start(); void UpdateResumeState(SDL_Event &event); void UpdatePauseState(SDL_Event &event); uint32_t GetSoftdropCount(float dt); void HandleGameOver(); void Draw(); void DrawLineCounter(); void DrawStatistics(); void DrawScore(); void DrawNextTetromino(); void DrawLevel(); void DrawGameOverMenu(); private: static constexpr ImGuiWindowFlags s_MenuImGuiWindowFlags = ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_AlwaysAutoResize; static constexpr ImGuiWindowFlags s_DefaultImGuiWindowFlags = ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoScrollbar; private: Board m_board; Tetromino m_active_tetromino; Tetromino::Id m_next_tetromino_id; int32_t m_tetromino_counters[Tetromino::id_count] {}; int32_t m_score = 0; int32_t m_line_counter = 0; int32_t m_starting_level = 0; int32_t m_level = 0; int32_t m_softdrop_counter = 0; int32_t m_highscore = 0; };