14 using Objects = std::vector<PlayerPlayback::Published>;
30 int square,
bool mortgaged)
noexcept
34 const auto base = mortgaged
51 std::size_t playerCount)
noexcept
59 const rules::GameState&
gameState,
int square,
60 const PlayerPlaybackInputs&
inputs)
noexcept
66 return bit != 0 && (
inputs.mortgageProperties &
bit) != 0;
68 return gameState.squares[
static_cast<std::size_t
>(square)].mortgaged;
79 const rules::GameState&
gameState,
int square,
85 return gameState.squares[
static_cast<std::size_t
>(square)].mortgaged;
90 const PlayerPlaybackInputs&
inputs)
93 const auto count = std::min<std::size_t>(
94 state.playerCount, std::min<std::size_t>(
98 inputs.iBarPlayerLocalHuman;
105 return std::unexpected(
106 "UDStats Player sort references invalid player");
112 return std::unexpected(
113 "UDStats Player colour is out of range");
123 if (
gameState.squares[
static_cast<std::size_t
>(square)].owner != player)
129 if (!
rect)
return std::unexpected(
"UDStats Player deed geometry failed");
132 const auto id =
deedId(square,
135 return std::unexpected(
136 "UDStats Player owned square has no deed sequence");
137 result.push_back({
id,
160 if (
desired == current_)
return {};
162 std::map<data::DataId, std::shared_ptr<const sequence::SequenceProgram>>
programs;
163 for (
const auto&
object :
desired)
165 if (
programs.contains(
object.id))
continue;
168 return std::unexpected(
169 "UDStats Player overlay resource failed: " +
loaded.error().detail);
172 std::set<std::pair<data::DataId, std::uint16_t>>
stops;
173 for (
const auto&
object : current_)
174 stops.emplace(
object.id,
object.priority);
180 return std::unexpected(
181 "sequence command queue cannot fit UDStats Player overlay transition");
188 return std::unexpected(
"validated UDStats Player stop rejected");
190 for (
const auto&
object :
desired)
195 return std::unexpected(
"validated UDStats Player start rejected");
static constexpr std::size_t Capacity
static std::expected< std::shared_ptr< const SequenceProgram >, RuntimeError > load(const data::DataSource &source, data::DataId id, std::size_t offset=0, DescriptionLimits limits={})
std::expected< void, std::string > sync(const State &state, const rules::GameState &gameState, const PlayerPlaybackInputs &inputs, display::Screen2D desiredView, engine::SequencePlayback &playback)
constexpr DataId EmptyDataId
constexpr DataId packDataId(std::uint16_t group, DataTag tag) noexcept
int propertyIndex(int square) noexcept
PropertyMask propertyBit(int square) noexcept
int propertyBarOrder(int square) noexcept
constexpr std::size_t MaxPlayerColours
constexpr std::size_t SquareCount
constexpr PlayerNumber MaxPlayers
SequenceTransform moveXYTransform(std::int32_t x, std::int32_t y) noexcept
constexpr std::uint16_t PlayerBoxPriority
constexpr data::DataTag PlayerBoxLargeBaseTag
constexpr data::DataTag PlayerDeedMortgagedBaseTag
constexpr data::DataTag PlayerDeedNormalBaseTag
constexpr std::uint16_t PlayerDeedBasePriority
std::optional< Rect > playerPropertyRect(const State &state, const rules::GameState &gameState, std::size_t column, int square) noexcept
constexpr data::DataTag PlayerBoxSmallBaseTag