Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
PieceRuntime.cpp
Go to the documentation of this file.
1#include "PieceRuntime.hpp"
2
3#include <cmath>
4
5namespace monopoly::pieces
6{
7 namespace
8 {
9 TokenPose poseFromMatrix(const sequence::Matrix3D& matrix) noexcept
10 {
11 return {matrix.values[12], matrix.values[13], matrix.values[14],
12 std::atan2(matrix.values[8], matrix.values[0])};
13 }
14 }
15
17 rules::PlayerNumber numberOfPlayers, const TokenRuntimeSources& sources,
18 const sequence::SequenceRuntime& runtime) noexcept
19 {
20 if (player >= numberOfPlayers || player >= rules::MaxPlayers) return {};
21
22 std::optional<TokenPose> located;
23 if (sources.idleSequences[player])
24 {
25 const auto info = runtime.info(*sources.idleSequences[player],
26 static_cast<std::uint16_t>(TokenPriority + player), false);
27 if (info && info->sequenceToWorldTransformation)
28 located = poseFromMatrix(*info->sequenceToWorldTransformation);
29 }
30 else if (sources.movingSequence)
31 {
32 if (const auto matrix = runtime.childMeshWorldMatrix(
33 *sources.movingSequence, Generic3DPriority))
35 }
36 else if (sources.playerMovingOut && *sources.playerMovingOut == player)
37 {
38 if (sources.playerMovingOutSequence)
39 if (const auto matrix = runtime.childMeshWorldMatrix(
40 *sources.playerMovingOutSequence, TokenPriority))
42 }
43 else if (sources.playerMovingIn && *sources.playerMovingIn == player)
44 {
45 if (sources.playerMovingInSequence)
46 if (const auto matrix = runtime.childMeshWorldMatrix(
47 *sources.playerMovingInSequence, TokenPriority))
49 }
50 else if (sources.jailTokenAnimation)
51 {
52 if (const auto matrix = runtime.childMeshWorldMatrix(
53 *sources.jailTokenAnimation, JailAnimationPriority))
55 }
56
57 if (located) lastKnown_[player] = *located;
58 return located.value_or(lastKnown_[player]);
59 }
60}
fonts::Runtime & runtime
unsigned index
TokenPose locate(rules::PlayerNumber player, rules::PlayerNumber numberOfPlayers, const TokenRuntimeSources &sources, const sequence::SequenceRuntime &runtime) noexcept
constexpr std::uint16_t Generic3DPriority
constexpr std::uint16_t JailAnimationPriority
constexpr std::uint16_t TokenPriority
std::uint8_t PlayerNumber
Definition RuleTypes.hpp:12
constexpr PlayerNumber MaxPlayers
Definition RuleTypes.hpp:14