Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
OptionsNavigationPlayback.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "OptionsUI.hpp"
5
6#include <array>
7#include <cstdint>
8#include <expected>
9#include <optional>
10#include <string>
11
12namespace monopoly::optionsui
13{
14 enum class NavigationVisual : std::uint8_t
15 {
16 Off = 0,
17 Idle,
18 Return,
19 Press
20 };
21
22 inline constexpr std::uint8_t NavigationStayAtEnd = 2;
23
24 inline constexpr std::array<data::DataTag, 4> NavigationIdleTags{
25 0x018E, 0x0192, 0x0186, 0x018A};
26 inline constexpr std::array<data::DataTag, 4> NavigationReturnTags{
27 0x018F, 0x0193, 0x0187, 0x018B};
28 inline constexpr std::array<data::DataTag, 4> NavigationPressTags{
29 0x0190, 0x0194, 0x0188, 0x018C};
30
31 inline constexpr std::array<std::uint16_t, 4> NavigationIdlePriorities{
32 1006, 1008, 1004, 1001};
33 inline constexpr std::array<std::uint16_t, 4> NavigationPressPriorities{
34 1007, 1009, 1005, 1003};
35
37 MenuButton button, NavigationVisual visual) noexcept
38 {
39 const auto index = static_cast<std::size_t>(button);
40 if (index >= NavigationIdleTags.size() || visual == NavigationVisual::Off)
41 return data::EmptyDataId;
42 const auto tag = visual == NavigationVisual::Idle ? NavigationIdleTags[index]
46 }
47 [[nodiscard]] constexpr std::uint16_t navigationPriority(
48 MenuButton button, NavigationVisual visual) noexcept
49 {
50 const auto index = static_cast<std::size_t>(button);
51 if (index >= NavigationIdlePriorities.size())
52 return 0;
53 return visual == NavigationVisual::Press
56 }
57
59 {
60 public:
61 [[nodiscard]] std::expected<void, std::string> sync(
62 const State& state,
65
67 {
68 visual_.fill(NavigationVisual::Off);
69 selected_.reset();
70 }
71
73 {
74 const auto index = static_cast<std::size_t>(button);
75 return index < visual_.size() ? visual_[index] : NavigationVisual::Off;
76 }
77 private:
78 std::array<NavigationVisual, 4> visual_{
83 std::optional<MenuButton> selected_;
84 };
85}
unsigned state
unsigned index
Button button
std::expected< void, std::string > sync(const State &state, display::Screen2D desiredView, engine::SequencePlayback &playback)
NavigationVisual visual(MenuButton button) const noexcept
std::uint32_t DataId
Definition DataBanks.hpp:10
constexpr DataId EmptyDataId
Definition DataBanks.hpp:13
constexpr DataId packDataId(std::uint16_t group, DataTag tag) noexcept
Definition DataBanks.hpp:39
constexpr std::uint8_t NavigationStayAtEnd
constexpr std::array< std::uint16_t, 4 > NavigationPressPriorities
constexpr std::uint16_t navigationPriority(MenuButton button, NavigationVisual visual) noexcept
constexpr data::DataId navigationSequence(MenuButton button, NavigationVisual visual) noexcept
constexpr std::array< data::DataTag, 4 > NavigationPressTags
constexpr std::array< data::DataTag, 4 > NavigationReturnTags
constexpr std::array< data::DataTag, 4 > NavigationIdleTags
constexpr std::array< std::uint16_t, 4 > NavigationIdlePriorities