Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
IBarScoreStripPlayback.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "DataBanks.hpp"
4#include "IBarLayout.hpp"
5#include "RuleTypes.hpp"
7
8#include <array>
9#include <cstdint>
10#include <expected>
11#include <string>
12
13namespace monopoly::ibar
14{
15 inline constexpr data::DataTag ScoreJailBarsTag = 0x01BF;
16 inline constexpr data::DataTag ScoreTokenBaseTag = 0x01C0;
17 inline constexpr data::DataTag ScoreLargeColourBaseTag = 0x01CB;
18 inline constexpr data::DataTag ScoreSmallColourBaseTag = 0x01D1;
19 inline constexpr std::uint16_t ScoreGeneralPriority = 256;
20 inline constexpr std::uint16_t ScoreBoxPriority = 305;
21 inline constexpr std::uint8_t ScorePlayerColourCount = 6;
22
35
37 {
38 std::array<ScoreStripPlayerPlan, rules::MaxPlayers> players{};
39 std::uint32_t tick{};
40 };
41
43 {
44 std::array<bool, rules::MaxPlayers> visiblePlayers{};
47 std::uint32_t tick{};
48 };
49
50 [[nodiscard]] std::expected<ScoreStripPlan, std::string> planScoreStrip(
52 const ScoreStripInputs& inputs);
53
54 enum class ScoreCashChange : std::uint8_t
55 {
56 None,
57 Up,
58 Down
59 };
60
69
79
81 {
82 public:
83 [[nodiscard]] std::expected<void, std::string> sync(
84 const ScoreStripPlan& plan,
86
88 {
89 players_ = {};
90 text_ = {};
91 for (auto& state : text_) state.displayedCash = -1;
92 }
93
95 rules::PlayerNumber player) const noexcept
96 {
97 return text_[static_cast<std::size_t>(player)];
98 }
99
101 rules::PlayerNumber player) const noexcept
102 {
103 return players_[static_cast<std::size_t>(player)];
104 }
105
106 private:
107 std::array<ScoreStripPlayerRuntime, rules::MaxPlayers> players_{};
108 std::array<ScoreTextState, rules::MaxPlayers> text_ = []
109 {
110 std::array<ScoreTextState, rules::MaxPlayers> states{};
111 for (auto& state : states) state.displayedCash = -1;
112 return states;
113 }();
114 };
115}
decision::EconomicActionPlan plan
unsigned index
std::expected< void, std::string > sync(const ScoreStripPlan &plan, engine::SequencePlayback &playback)
const ScoreStripPlayerRuntime & playerState(rules::PlayerNumber player) const noexcept
const ScoreTextState & textState(rules::PlayerNumber player) const noexcept
std::uint32_t DataId
Definition DataBanks.hpp:10
constexpr DataId EmptyDataId
Definition DataBanks.hpp:13
std::uint16_t DataTag
Definition DataBanks.hpp:11
constexpr std::uint16_t ScoreBoxPriority
constexpr data::DataTag ScoreJailBarsTag
constexpr data::DataTag ScoreLargeColourBaseTag
constexpr std::uint8_t ScorePlayerColourCount
constexpr std::uint16_t ScoreGeneralPriority
constexpr data::DataTag ScoreTokenBaseTag
constexpr data::DataTag ScoreSmallColourBaseTag
State & state()
Definition IBar.cpp:1285
std::expected< ScoreStripPlan, std::string > planScoreStrip(const rules::GameState &state, const ScoreStripInputs &inputs)
std::uint8_t PlayerNumber
Definition RuleTypes.hpp:12
std::array< bool, rules::MaxPlayers > visiblePlayers
std::array< ScoreStripPlayerPlan, rules::MaxPlayers > players