Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
Display.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <cstdint>
5#include <filesystem>
6#include <optional>
8#include "PieceCamera.hpp"
9#include "UIMessages.hpp"
10
11namespace monopoly::display
12{
13 enum class Screen2D : std::uint8_t
14 {
15 // Contrat numerique de Source/monopoly/display.h.
16 Black = 0,
17 PlayerSelect = 1,
19 Options = 3,
20 Portfolio = 4,
21 Main = 5,
22 Auction = 6,
23 Trade = 7,
24
25 // L'original utilisait -1 pour la vue courante avant le
26 // premier DISPLAY_UDBOARD_Show().
27 Invalid = 0xFF
28 };
29
30 // UDPSEL_SetupPhase de UDPsel.h, dans le même ordre.
31 enum class Viewport3D : std::uint8_t
32 {
33 Main = 0,
34 Status,
35 Trade,
36 Off
37 };
38
39 inline constexpr std::uint16_t Board3DPriority = 90; // display.h DISPLAY_Board3dPriority
40
41 [[nodiscard]] constexpr bool isBoardVisible(Screen2D screen) noexcept
42 {
43 // display.h DISPLAY_IsBoardVisible uses desired2DView.
44 return screen == Screen2D::Main ||
45 screen == Screen2D::Trade ||
46 screen == Screen2D::Portfolio;
47 }
48
49 [[nodiscard]] constexpr bool isIBarVisible(Screen2D screen) noexcept
50 {
51 // display.h DISPLAY_IsIBarVisible uses desired2DView.
52 return screen == Screen2D::Main ||
53 screen == Screen2D::Trade ||
54 screen == Screen2D::Portfolio;
55 }
56
73
74 // Source/monopoly/UDBoard.cpp: viewRects, CameraAngles2D[0], startup
75 // interpolation endpoints and the 45-degree SetCamera3D command.
77 {
78 switch (viewport)
79 {
80 case Viewport3D::Main: return {0, 0, 800, 450};
81 case Viewport3D::Status: return {0, 0, 400, 225};
82 case Viewport3D::Trade: return {200, 0, 600, 225};
83 default: return {}; // Off does not publish a visible 3D viewport.
84 }
85 }
87 {
88 return {{242.9F, 1200.0F, 243.0F}, {0.0045F, -0.99999F, 0.0F},
89 {1.0F, 0.0F, 0.0F}, static_cast<float>(45.0 / 180.0 * 3.1415926),
91 }
92
93 struct State
94 {
100 std::optional<pieces::BoardCameraView> currentBoardCamera;
103 std::uint8_t bssmCameraState = 0;
104 std::uint64_t bssmCameraRequestTick = 0;
105 int city = 0;
106 int system = 13; // NOTW_MONA_US
107 // Source DISPLAY_state.customBoardPath: validated asset directory used
108 // whenever city == -1. Empty for every stock board.
109 std::filesystem::path customBoardPath;
110 bool game3DOn = true;
111 bool board3DOn = false;
117 bool optionMusicOn = true;
118 std::uint8_t optionMusicTuneIndex = 0;
119 bool optionLightingOn = true;
120 bool optionFilteringOn = false;
121 bool justReadACardHack = false;
122 std::uint64_t boardTick = 0;
123 bool mouseLeftPressed = false;
124 bool mouseRightPressed = false;
125 bool manualMouseCamLock = false;
127 std::uint64_t manualMouseCamTime = 0;
128 std::uint64_t lastBoardActivityTick = 0;
129 bool demoModeDesired = false;
131 std::uint8_t demoCameraIndex = 0;
132 std::uint32_t demoWaitTicks = 0;
133 std::uint32_t demoTicksPerMove = 0;
134 std::uint8_t demoCycles = 0;
136 bool cameraCanFloat = false;
138 std::array<float, 3> lastFloatingVariation{};
141
144
147
150
153
156
157 bool flashCurrentToken = false;
159
160 bool initialized = false;
161 };
162
163 bool initialize();
164 void shutdown();
165
166 void setBackdrop(Screen2D screen);
167
169 std::optional<std::uint8_t> randomFourteen);
173
180 bool lightingOn, bool board3DOn) noexcept;
181 void cycleIBarCamera(std::int32_t currentSquare, bool sequential) noexcept;
182 void requestBssmCamera(std::int32_t square, std::uint8_t action) noexcept;
183 void setTokenAnimationStackActive(bool active) noexcept;
184 void processBoardInput(const uimsg::Message& message);
185 void tickActions(std::uint64_t numberOfTicks);
186
187 void showAll2();
188
189 State& state();
191}
192
193
194
195
bool enabled
Definition Engine.cpp:170
unsigned index
State & state()
Definition Display.cpp:699
void processBoardInput(const uimsg::Message &message)
Definition Display.cpp:538
void applyMusicOption(bool musicOn) noexcept
Definition Display.cpp:427
void applyRuntimeOptions(bool tokenAnimationsOn, bool cameraMovementOn, bool lightingOn, bool board3DOn) noexcept
Definition Display.cpp:437
engine::World3DRect worldViewport(Viewport3D viewport) noexcept
Definition Display.hpp:76
constexpr bool isIBarVisible(Screen2D screen) noexcept
Definition Display.hpp:49
void releaseDiceCameraOverride()
Definition Display.cpp:392
void applyHostCommentsOption(bool enabled) noexcept
Definition Display.cpp:422
constexpr bool isBoardVisible(Screen2D screen) noexcept
Definition Display.hpp:41
void requestBssmCamera(std::int32_t square, std::uint8_t action) noexcept
Definition Display.cpp:519
void noteBoardActivity() noexcept
Definition Display.cpp:412
constexpr std::uint16_t Board3DPriority
Definition Display.hpp:39
void endDiceCameraOverrideEarly()
Definition Display.cpp:398
void beginDiceCameraOverride(std::optional< std::uint8_t > randomFourteen)
Definition Display.cpp:381
void setTokenAnimationStackActive(bool active) noexcept
Definition Display.cpp:514
void setBackdrop(Screen2D screen)
Definition Display.cpp:363
const State & stateReadOnly()
Definition Display.cpp:704
void cycleIBarCamera(std::int32_t currentSquare, bool sequential) noexcept
Definition Display.cpp:471
void cancelDiceCameraOverride()
Definition Display.cpp:405
void tickActions(std::uint64_t numberOfTicks)
Definition Display.cpp:621
void applyTokenVoicesOption(bool enabled) noexcept
Definition Display.cpp:417
void applyMusicTune(std::uint8_t tuneIndex) noexcept
Definition Display.cpp:432
engine::World3DCamera initialBoardCamera() noexcept
Definition Display.hpp:86
constexpr float MonopolyBoardFarPlane
constexpr float MonopolyBoardNearPlane
PlayerSetupPhase desiredPlayerSetupPhase
Definition Display.hpp:151
std::uint8_t demoCameraIndex
Definition Display.hpp:131
pieces::BoardCameraView demoStartCamera
Definition Display.hpp:130
std::filesystem::path customBoardPath
Definition Display.hpp:109
pieces::BoardCameraView bssmPriorCamera
Definition Display.hpp:101
engine::World3DCamera worldCamera
Definition Display.hpp:95
std::uint8_t optionMusicTuneIndex
Definition Display.hpp:118
std::uint64_t lastBoardActivityTick
Definition Display.hpp:128
pieces::BoardCameraView desiredBoardCamera
Definition Display.hpp:98
pieces::BoardCameraView bssmLastRequestedCamera
Definition Display.hpp:102
std::uint8_t demoCycles
Definition Display.hpp:134
std::uint64_t bssmCameraRequestTick
Definition Display.hpp:104
PlayerSetupPhase currentPlayerSetupPhase
Definition Display.hpp:148
std::uint32_t demoWaitTicks
Definition Display.hpp:132
std::uint64_t manualMouseCamTime
Definition Display.hpp:127
PlayerSetupPhase previousPlayerSetupPhase
Definition Display.hpp:145
std::uint32_t demoTicksPerMove
Definition Display.hpp:133
std::uint64_t boardTick
Definition Display.hpp:122
std::optional< pieces::BoardCameraView > currentBoardCamera
Definition Display.hpp:100
std::uint8_t bssmCameraState
Definition Display.hpp:103
std::array< float, 3 > lastFloatingVariation
Definition Display.hpp:138