Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
OptionsUI.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "Display.hpp"
4#include "UIMessages.hpp"
5
6#include <array>
7#include <cstdint>
8#include <optional>
9#include <string>
10#include <vector>
11
12namespace monopoly::optionsui
13{
14 enum class Screen : std::uint8_t
15 {
16 File = 0,
17 Option,
18 Credits,
19 Help,
22 };
23
24 enum class MenuButton : std::uint8_t
25 {
26 File = 0,
27 Option,
28 Credits,
29 Help,
30 Count
31 };
32
33 enum class FileButton : std::uint8_t
34 {
35 NewGame = 0,
36 Load,
37 Save,
38 Exit,
39 Cancel,
40 Count
41 };
42
43 enum class HelpButton : std::uint8_t
44 {
45 QuickHelp = 0,
47 Cancel,
48 Count
49 };
50
51 enum class OptionToggle : std::uint8_t
52 {
53 TokenVoices = 0,
55 Music,
57 Camera,
59 Board3D,
63 Count
64 };
65
66 inline constexpr std::uint8_t MusicTuneCount = 5;
67
72
73 struct Rect
74 {
75 int left{};
76 int top{};
77 int right{};
78 int bottom{};
79
80 [[nodiscard]] bool contains(int x, int y) const noexcept
81 {
82 return x >= left && x < right && y >= top && y < bottom;
83 }
84 };
85
86 struct State
87 {
90 std::array<bool, static_cast<std::size_t>(OptionToggle::Count)> optionOn{};
91 std::uint8_t musicTuneIndex{};
92 std::uint8_t originalMusicTuneIndex{};
94 bool active{};
95 std::array<Rect, MusicTuneCount> musicChoiceRects{};
97 std::string quickHelpText;
98 std::vector<std::string> quickHelpLines;
99 std::size_t quickHelpFirstLine{};
100 std::size_t quickHelpLinesPerPage{1};
101 std::vector<std::size_t> quickHelpPageOffsets;
102 std::size_t quickHelpPageIndex{};
104 std::array<Rect, 3> quickHelpButtonRects{};
105 };
106
108 {
109 std::optional<display::Screen2D> requestedBackdrop;
110 std::optional<MenuButton> pressedMenuButton;
111 std::optional<FileButton> pressedFileButton;
112 std::optional<HelpButton> pressedHelpButton;
113 std::optional<OptionToggle> pressedOptionToggle;
115 std::optional<std::uint8_t> pressedMusicTune;
116 };
117
119 [[nodiscard]] std::optional<MenuButton> menuButtonHit(int x, int y) noexcept;
127 [[nodiscard]] std::size_t quickHelpPageLineCount(std::size_t totalLines,
128 std::size_t firstLine, int lineHeight, bool initialPage) noexcept;
129
130 [[nodiscard]] bool beginFromIBar(
131 State& state,
132 display::Screen2D previousView) noexcept;
133
135 bool tokenVoicesOn, bool hostCommentsOn,
136 bool musicOn, std::uint8_t musicTuneIndex,
138 bool lightingOn, bool board3DOn,
139 bool filteringOn = true) noexcept;
140
142
144 State& state,
145 display::Screen2D desiredView,
146 const uimsg::Message& message) noexcept;
147
148 void reset(State& state) noexcept;
149}
unsigned state
unsigned index
Button button
Rect optionToggleRect(OptionToggle toggle, bool onSide) noexcept
Definition OptionsUI.cpp:77
bool selectMusicTune(State &state, std::uint8_t tuneIndex) noexcept
constexpr std::uint8_t MusicTuneCount
Definition OptionsUI.hpp:66
bool beginFromIBar(State &state, display::Screen2D previousView) noexcept
bool optionToggleSupported(OptionToggle toggle) noexcept
Definition OptionsUI.cpp:91
void reset(State &state) noexcept
InputResult processInput(State &state, display::Screen2D desiredView, const uimsg::Message &message) noexcept
Rect menuButtonRect(MenuButton button) noexcept
Definition OptionsUI.cpp:49
std::size_t quickHelpPageLineCount(std::size_t totalLines, std::size_t firstLine, int lineHeight, bool initialPage) noexcept
Definition OptionsUI.cpp:8
void loadSupportedOptionValues(State &state, bool tokenVoicesOn, bool hostCommentsOn, bool musicOn, std::uint8_t musicTuneIndex, bool tokenAnimationsOn, bool cameraMovementOn, bool lightingOn, bool board3DOn, bool filteringOn) noexcept
Rect optionOkayRect() noexcept
Definition OptionsUI.cpp:70
std::optional< HelpButton > helpButtonHit(int x, int y) noexcept
std::optional< FileButton > fileButtonHit(int x, int y) noexcept
constexpr std::array< OptionToggle, 8 > SupportedOptionToggles
Definition OptionsUI.hpp:68
std::optional< MenuButton > menuButtonHit(int x, int y) noexcept
Definition OptionsUI.cpp:59
Rect fileButtonRect(FileButton button) noexcept
Definition OptionsUI.cpp:97
Rect helpButtonRect(HelpButton button) noexcept
std::optional< display::Screen2D > requestedBackdrop
std::optional< HelpButton > pressedHelpButton
std::optional< FileButton > pressedFileButton
std::optional< std::uint8_t > pressedMusicTune
std::optional< OptionToggle > pressedOptionToggle
std::optional< MenuButton > pressedMenuButton
bool contains(int x, int y) const noexcept
Definition OptionsUI.hpp:80
std::size_t quickHelpLinesPerPage
std::array< bool, static_cast< std::size_t >(OptionToggle::Count)> optionOn
Definition OptionsUI.hpp:90
std::array< Rect, 3 > quickHelpButtonRects
std::uint8_t originalMusicTuneIndex
Definition OptionsUI.hpp:92
display::Screen2D previousView
Definition OptionsUI.hpp:89
std::vector< std::string > quickHelpLines
Definition OptionsUI.hpp:98
std::vector< std::size_t > quickHelpPageOffsets
std::array< Rect, MusicTuneCount > musicChoiceRects
Definition OptionsUI.hpp:95