29 constexpr int JustVisiting =
31 constexpr int FreeParking =
33 constexpr int GoToJail =
35 constexpr int InJail =
37 int tile = square == InJail ? JustVisiting : square;
42 static_cast<std::size_t
>(
tile)];
48 if (
tile < JustVisiting)
52 else if (
tile < FreeParking)
55 yaw = std::numbers::pi_v<float> / 2.0F;
57 else if (
tile < GoToJail)
60 yaw = std::numbers::pi_v<float>;
65 yaw = -std::numbers::pi_v<float> / 2.0F;
80 const auto cameraIndex =
static_cast<std::uint32_t
>(camera);
83 return std::unexpected(
"ownership highlight camera is outside legacy 0..38 range");
87 const auto owner =
state.squares[square].owner;
91 return std::unexpected(
"ownership highlight player colour is outside legacy 0..5 range");
92 const auto priority =
static_cast<std::uint16_t
>(
94 const bool mortgaged =
state.squares[square].mortgaged;
98 const auto base = mortgaged
110 return std::unexpected(
111 "2D ownership highlight encountered an owned non-ownable square");
114 const auto base = mortgaged
116 const auto tag =
static_cast<std::uint32_t
>(
base) +
offset;
118 return std::unexpected(
"2D ownership highlight tag overflows DataTag");
131 std::array<sequence::SequenceTransform, rules::SquareCount>
transforms{};
134 for (std::size_t square = 0; square <
plan.size(); ++square)
137 if (
desired == current_[square])
continue;
139 if (!
plan[square])
continue;
142 if (!
loaded)
return std::unexpected(
loaded.error().detail);
152 if (!
bytes)
return std::unexpected(
bytes.error().detail);
163 return std::unexpected(
164 "sequence command queue cannot fit board ownership transition");
166 for (std::size_t square = 0; square <
plan.size(); ++square)
169 if (
desired == current_[square])
continue;
173 current_[square],
priority,
false});
183 for (std::size_t square = 0; square <
plan.size(); ++square)
decision::EconomicActionPlan plan
LegacyBitmapMetadata metadata
std::vector< std::byte > bytes
std::expected< void, std::string > sync(const OwnershipHighlightPlan &plan, 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 data::DataTag Ownership3DMortgagedBaseTag
constexpr std::uint16_t OwnershipPriorityBase
int ownershipPropertyIndex(int square) noexcept
constexpr data::DataTag Ownership2DNormalBaseTag
constexpr std::uint32_t Ownership2DPerCamera
sequence::Matrix3D ownershipHighlight3DTransform(int square) noexcept
std::expected< OwnershipHighlightPlan, std::string > planOwnershipHighlights(const rules::GameState &state, display::Screen2D view, bool board3DOn, pieces::BoardCameraView camera)
constexpr float Ownership3DScale
std::array< std::optional< OwnershipHighlight >, rules::SquareCount > OwnershipHighlightPlan
constexpr data::DataTag Ownership2DMortgagedBaseTag
constexpr std::uint32_t OwnershipColours
constexpr data::DataTag Ownership3DNormalBaseTag
const std::array< Point3D, 42 > & locations3D()
constexpr DataId EmptyDataId
std::expected< LegacyUapMetadata, BitmapError > inspectLegacyUap(std::span< const std::byte > bytes)
constexpr DataId packDataId(std::uint16_t group, DataTag tag) noexcept
constexpr bool isBoardVisible(Screen2D screen) noexcept
bool isOwnable(SquareType square)
constexpr std::size_t SquareCount
constexpr PlayerNumber MaxPlayers
MoveSequenceCommand makeMoveTheWorks(data::DataId dataId, std::uint16_t priority, SequenceTransform transform, bool wholeTree) noexcept
Matrix3D moveRySTxzTransform(float yaw, float scale, float x, float z) noexcept
Matrix3D identity3D() noexcept
SequenceTransform moveXYTransform(std::int32_t x, std::int32_t y) noexcept