Monopoly — Portage moderne
0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
PieceCamera.cpp
Go to the documentation of this file.
1
#include "
PieceCamera.hpp
"
2
3
#include <array>
4
5
namespace
monopoly::pieces
6
{
7
namespace
8
{
9
using
enum
BoardCameraView
;
10
11
constexpr
std::array<BoardCameraView, 42>
Camera3
{{
12
CornerGo
,
13
ThreeTiles01
,
ThreeTiles01
,
ThreeTiles01
,
14
ThreeTiles02
,
ThreeTiles02
,
ThreeTiles02
,
15
ThreeTiles03
,
ThreeTiles03
,
ThreeTiles03
,
16
CornerJail
,
17
ThreeTiles04
,
ThreeTiles04
,
ThreeTiles04
,
18
ThreeTiles05
,
ThreeTiles05
,
ThreeTiles05
,
19
ThreeTiles06
,
ThreeTiles06
,
ThreeTiles06
,
20
CornerFreeParking
,
21
ThreeTiles07
,
ThreeTiles07
,
ThreeTiles07
,
22
ThreeTiles08
,
ThreeTiles08
,
ThreeTiles08
,
23
ThreeTiles09
,
ThreeTiles09
,
ThreeTiles09
,
24
CornerGoToJail
,
25
ThreeTiles10
,
ThreeTiles10
,
ThreeTiles10
,
26
ThreeTiles11
,
ThreeTiles11
,
ThreeTiles11
,
27
ThreeTiles12
,
ThreeTiles12
,
ThreeTiles12
,
28
CornerJail
,
29
CornerGo
30
}};
31
32
constexpr
std::array<BoardCameraView, 42>
Camera5
{{
33
FiveTiles01
,
FiveTiles01
,
FiveTiles01
,
34
FiveTiles01
,
FiveTiles01
,
FiveTiles01
,
35
FiveTiles02
,
FiveTiles02
,
FiveTiles02
,
FiveTiles02
,
36
FiveTiles03
,
FiveTiles03
,
FiveTiles03
,
37
FiveTiles03
,
FiveTiles03
,
FiveTiles03
,
38
FiveTiles04
,
FiveTiles04
,
FiveTiles04
,
FiveTiles04
,
39
FiveTiles05
,
FiveTiles05
,
FiveTiles05
,
40
FiveTiles05
,
FiveTiles05
,
FiveTiles05
,
41
FiveTiles06
,
FiveTiles06
,
FiveTiles06
,
FiveTiles06
,
42
FiveTiles07
,
FiveTiles07
,
FiveTiles07
,
43
FiveTiles07
,
FiveTiles07
,
FiveTiles07
,
44
FiveTiles08
,
FiveTiles08
,
FiveTiles08
,
FiveTiles08
,
45
CornerJail
,
46
CornerGo
47
}};
48
49
constexpr
std::array<BoardCameraView, 42>
Camera15
{{
50
FifteenTiles01
,
FifteenTiles01
,
FifteenTiles01
,
FifteenTiles01
,
51
FifteenTiles02
,
FifteenTiles02
,
FifteenTiles02
,
52
FifteenTiles03
,
FifteenTiles03
,
FifteenTiles03
,
53
FifteenTiles04
,
FifteenTiles04
,
FifteenTiles04
,
FifteenTiles04
,
54
FifteenTiles05
,
FifteenTiles05
,
FifteenTiles05
,
55
FifteenTiles06
,
FifteenTiles06
,
FifteenTiles06
,
56
FifteenTiles07
,
FifteenTiles07
,
FifteenTiles07
,
FifteenTiles07
,
57
FifteenTiles08
,
FifteenTiles08
,
FifteenTiles08
,
58
FifteenTiles09
,
FifteenTiles09
,
FifteenTiles09
,
59
FifteenTiles10
,
FifteenTiles10
,
FifteenTiles10
,
FifteenTiles10
,
60
FifteenTiles11
,
FifteenTiles11
,
FifteenTiles11
,
61
FifteenTiles12
,
FifteenTiles12
,
FifteenTiles12
,
62
CornerJail
,
63
CornerGo
64
}};
65
66
template
<std::
size_t
Size>
67
BoardCameraView
tableLookup
(
const
std::array<BoardCameraView, Size>&
table
,
68
std::int32_t square)
noexcept
69
{
70
if
(square < 0 ||
static_cast<
std::size_t
>
(square) >=
table
.size())
71
return
CornerGo
;
72
return
table
[
static_cast<
std::size_t
>
(square)];
73
}
74
}
75
76
BoardCameraView
selectAppropriateView
(
77
BoardViewSelectionType
type,
78
BoardCameraView
desired
,
79
std::int32_t currentSquare,
80
std::int32_t
variable
)
noexcept
81
{
82
// Source/monopoly/UDBoard.cpp::UDBOARD_SelectAppropriateView.
83
// `variable` survives the public contract, but the only random branch
84
// that used it is commented out in the shipped source.
85
if
(
variable
<= 0)
variable
= 1;
86
(
void
)
variable
;
87
88
switch
(type)
89
{
90
case
BoardViewSelectionType::RollDice
:
91
{
92
std::int32_t square = currentSquare;
93
if
(square > 39) square = 10;
94
95
std::int32_t view = 3 * (square / 10);
96
square %= 10;
97
--square;
98
if
(square < 0) square = 0;
99
view += square / 3;
100
view +=
static_cast<
std::int32_t
>
(
BoardCameraView::FifteenTiles01
);
101
return
static_cast<
BoardCameraView
>
(view);
102
}
103
case
BoardViewSelectionType::JailChoice
:
104
return
BoardCameraView::CornerJail
;
105
}
106
return
desired
;
107
}
108
109
BoardCameraView
pickCameraFor3Squares
(std::int32_t square)
noexcept
110
{
111
return
tableLookup
(
Camera3
, square);
112
}
113
114
BoardCameraView
pickCameraFor5Squares
(std::int32_t square)
noexcept
115
{
116
return
tableLookup
(
Camera5
, square);
117
}
118
119
BoardCameraView
pickCameraFor15Squares
(std::int32_t square)
noexcept
120
{
121
return
tableLookup
(
Camera15
, square);
122
}
123
124
BoardCameraView
pickGoodCamera
(
125
std::int32_t square, std::int32_t
distance
)
noexcept
126
{
127
std::int32_t
distanceToCorner
= 10 - (square % 10);
128
if
(
distanceToCorner
== 10 &&
distance
== 0)
distanceToCorner
= 0;
129
if
(
distance
>= 9)
return
pickCameraFor15Squares
(square);
130
131
if
(
distanceToCorner
<
distance
||
distance
== 0)
132
{
133
switch
((square +
distanceToCorner
) / 10)
134
{
135
case
1:
return
BoardCameraView::CornerJail
;
136
case
2:
return
BoardCameraView::CornerFreeParking
;
137
case
3:
return
BoardCameraView::CornerGoToJail
;
138
default
:
return
BoardCameraView::CornerGo
;
139
}
140
}
141
142
const
auto
destination
= (square +
distance
) % 40;
143
if
(
destination
<= 3)
144
return
pickCameraFor3Squares
(
destination
);
145
146
return
pickCameraFor5Squares
((square +
distance
- 1) % 40);
147
}
148
}
index
unsigned index
Definition
ModernIBarSkin.cpp:25
PieceCamera.hpp
desired
bool desired
Definition
TradeOfferIconPlayback.cpp:18
monopoly::pieces
Definition
PieceBuildingDisplay.cpp:6
monopoly::pieces::pickGoodCamera
BoardCameraView pickGoodCamera(std::int32_t square, std::int32_t distance) noexcept
Definition
PieceCamera.cpp:124
monopoly::pieces::pickCameraFor3Squares
BoardCameraView pickCameraFor3Squares(std::int32_t square) noexcept
Definition
PieceCamera.cpp:109
monopoly::pieces::pickCameraFor5Squares
BoardCameraView pickCameraFor5Squares(std::int32_t square) noexcept
Definition
PieceCamera.cpp:114
monopoly::pieces::BoardCameraView
BoardCameraView
Definition
PieceCamera.hpp:10
monopoly::pieces::BoardCameraView::ThreeTiles10
@ ThreeTiles10
monopoly::pieces::BoardCameraView::ThreeTiles12
@ ThreeTiles12
monopoly::pieces::BoardCameraView::FiveTiles04
@ FiveTiles04
monopoly::pieces::BoardCameraView::ThreeTiles08
@ ThreeTiles08
monopoly::pieces::BoardCameraView::ThreeTiles04
@ ThreeTiles04
monopoly::pieces::BoardCameraView::CornerJail
@ CornerJail
monopoly::pieces::BoardCameraView::FiveTiles05
@ FiveTiles05
monopoly::pieces::BoardCameraView::FiveTiles02
@ FiveTiles02
monopoly::pieces::BoardCameraView::ThreeTiles11
@ ThreeTiles11
monopoly::pieces::BoardCameraView::FiveTiles07
@ FiveTiles07
monopoly::pieces::BoardCameraView::ThreeTiles05
@ ThreeTiles05
monopoly::pieces::BoardCameraView::FifteenTiles05
@ FifteenTiles05
monopoly::pieces::BoardCameraView::ThreeTiles06
@ ThreeTiles06
monopoly::pieces::BoardCameraView::FifteenTiles02
@ FifteenTiles02
monopoly::pieces::BoardCameraView::FifteenTiles08
@ FifteenTiles08
monopoly::pieces::BoardCameraView::CornerFreeParking
@ CornerFreeParking
monopoly::pieces::BoardCameraView::FiveTiles08
@ FiveTiles08
monopoly::pieces::BoardCameraView::FifteenTiles10
@ FifteenTiles10
monopoly::pieces::BoardCameraView::FifteenTiles03
@ FifteenTiles03
monopoly::pieces::BoardCameraView::ThreeTiles01
@ ThreeTiles01
monopoly::pieces::BoardCameraView::CornerGo
@ CornerGo
monopoly::pieces::BoardCameraView::ThreeTiles07
@ ThreeTiles07
monopoly::pieces::BoardCameraView::CornerGoToJail
@ CornerGoToJail
monopoly::pieces::BoardCameraView::FifteenTiles09
@ FifteenTiles09
monopoly::pieces::BoardCameraView::FifteenTiles01
@ FifteenTiles01
monopoly::pieces::BoardCameraView::FifteenTiles04
@ FifteenTiles04
monopoly::pieces::BoardCameraView::FifteenTiles11
@ FifteenTiles11
monopoly::pieces::BoardCameraView::ThreeTiles03
@ ThreeTiles03
monopoly::pieces::BoardCameraView::FiveTiles01
@ FiveTiles01
monopoly::pieces::BoardCameraView::FifteenTiles06
@ FifteenTiles06
monopoly::pieces::BoardCameraView::ThreeTiles02
@ ThreeTiles02
monopoly::pieces::BoardCameraView::FiveTiles03
@ FiveTiles03
monopoly::pieces::BoardCameraView::ThreeTiles09
@ ThreeTiles09
monopoly::pieces::BoardCameraView::FifteenTiles12
@ FifteenTiles12
monopoly::pieces::BoardCameraView::FiveTiles06
@ FiveTiles06
monopoly::pieces::BoardCameraView::FifteenTiles07
@ FifteenTiles07
monopoly::pieces::BoardViewSelectionType
BoardViewSelectionType
Definition
PieceCamera.hpp:54
monopoly::pieces::BoardViewSelectionType::RollDice
@ RollDice
monopoly::pieces::BoardViewSelectionType::JailChoice
@ JailChoice
monopoly::pieces::selectAppropriateView
BoardCameraView selectAppropriateView(BoardViewSelectionType type, BoardCameraView desired, std::int32_t currentSquare, std::int32_t variable) noexcept
Definition
PieceCamera.cpp:76
monopoly::pieces::pickCameraFor15Squares
BoardCameraView pickCameraFor15Squares(std::int32_t square) noexcept
Definition
PieceCamera.cpp:119
PieceCamera.cpp
Generated by
1.9.8