chainreaction/game_screen.hpp

52 lines
1.3 KiB
C++

#ifndef GAME_SCREEN_HPP
#define GAME_SCREEN_HPP
#include "board_widget.hpp"
#include "data.hpp"
#include "fading_caption.hpp"
#include "menu.hpp"
#include <unordered_map>
struct SDL_Renderer;
namespace game::ui
{
class GameScreen final : public bwidgets::Widget
{
bwidgets::Font* _font_big {nullptr};
std::string _font_file;
bwidgets::Font* _font_medium {nullptr};
Menu _menu;
void _load_font(int);
void _handle_geometry_change(const SDL_Rect&) noexcept override;
void _handle_renderer_change(bwidgets::Renderer*) override;
void _handle_rendering() override;
public:
BoardWidget board;
bwidgets::Caption caption_none;
FadingCaption caption_notification;
bwidgets::Caption caption_p1;
bwidgets::Caption caption_p2;
data::Player cur_player {data::Player::P1};
GameScreen();
~GameScreen() override;
auto font(const std::string&) -> GameScreen*;
auto handle_event(const SDL_Event&) -> GameScreen* override;
[[nodiscard]] auto size() const noexcept -> bwidgets::Size override;
[[nodiscard]] inline auto settings_event() const
{
return _menu.settings_event;
}
};
}
#endif