20 std::size_t playerCount)
noexcept
22 return playerCount > 4 ? 130 : 198;
30 [[
nodiscard]] std::expected<std::vector<PlayerCashPlayback::Published>,
34 const PlayerPlaybackInputs&
inputs)
36 std::vector<PlayerCashPlayback::Published> result;
37 const auto count = std::min<std::size_t>(
39 std::min<std::size_t>(
gameState.numberOfPlayers,
43 inputs.iBarPlayerLocalHuman;
49 if (player >=
gameState.numberOfPlayers ||
52 return std::unexpected(
53 "UDStats Player cash references invalid player");
83 if (
desired == current_)
return {};
84 std::shared_ptr<const sequence::SequenceProgram> program;
91 return std::unexpected(
92 "UDStats Player cash icon failed: " +
loaded.error().detail);
94 program = std::move(*
loaded);
98 (current_.empty() ? 0
U : 1U) +
desired.size();
102 return std::unexpected(
103 "sequence command queue cannot fit UDStats Player cash transition");
106 if (!current_.empty() &&
108 cashIconId(), PlayerCashPriority, false}))
110 return std::unexpected(
111 "validated UDStats Player cash stop rejected");
113 for (
const auto&
object :
desired)
119 return std::unexpected(
120 "validated UDStats Player cash 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 packDataId(std::uint16_t group, DataTag tag) noexcept
constexpr PlayerNumber MaxPlayers
SequenceTransform moveXYTransform(std::int32_t x, std::int32_t y) noexcept
constexpr data::DataTag PlayerCashIconTag
constexpr int PlayerCashLocalY
constexpr int PlayerCashLocalX
constexpr std::uint16_t PlayerCashPriority