18 using Objects = std::vector<RecipientPlayback::Published>;
25 if (!
state.boxActive)
return result;
30 const auto playerCount = std::min<std::size_t>(
32 for (
int player =
static_cast<int>(playerCount) - 1;
33 player >= 0; --player)
35 const auto bit = 1u <<
static_cast<unsigned>(player);
36 if ((
state.eligibleRecipients &
bit) == 0u)
continue;
42 (
static_cast<int>(
ordinal) + 5) * 19 + 3;
46 if ((
state.recipientMask &
bit) != 0u)
63 if (
desired == current_)
return {};
66 std::shared_ptr<const sequence::SequenceProgram>>
programs;
67 for (
const auto&
object :
desired)
69 if (
programs.contains(
object.id))
continue;
73 return std::unexpected(
74 "UDChat recipient resource failed: " +
loaded.error().detail);
78 std::set<std::pair<data::DataId, std::uint16_t>>
stops;
79 for (
const auto&
object : current_)
80 stops.emplace(
object.id,
object.priority);
85 return std::unexpected(
86 "sequence command queue cannot fit UDChat recipient transition");
93 return std::unexpected(
"validated UDChat recipient stop rejected");
95 for (
const auto&
object :
desired)
100 return std::unexpected(
"validated UDChat recipient start rejected");
std::expected< void, std::string > sync(const State &state, const rules::GameState &gameState, engine::SequencePlayback &playback)
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={})
constexpr std::uint16_t ChatBarPriority
constexpr data::DataTag ChatAllTag
constexpr data::DataTag ChatPlayerColourBaseTag
constexpr data::DataTag ChatPlayerFocusBaseTag
constexpr DataId packDataId(std::uint16_t group, DataTag tag) noexcept
constexpr std::size_t MaxPlayerColours
constexpr PlayerNumber MaxPlayers
SequenceTransform moveXYTransform(std::int32_t x, std::int32_t y) noexcept