Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
BoardCameraController.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "PieceCamera.hpp"
5
6#include <array>
7#include <cstdint>
8#include <optional>
9
10namespace monopoly::display { struct State; }
11
13{
14 inline constexpr std::uint64_t BaseMoveTicks = 75;
15
17 pieces::BoardCameraView view) noexcept;
18
19 // Presentation framing may replace only the settled default overview.
20 // Authored sequence views, interpolation and player camera input keep ownership.
21 [[nodiscard]] bool isPresentationDefault(const display::State& state) noexcept;
23
30
32 {
33 public:
34 void reset(std::uint64_t tick = 0) noexcept;
35 [[nodiscard]] Update tick(std::uint64_t tick) noexcept;
37 std::uint64_t tick, bool forceInterrupt = false,
38 bool manualRequest = false) noexcept;
39 void requestDiceMove(std::uint64_t tick,
40 std::uint8_t randomFourteen) noexcept;
42 std::uint64_t tick, std::uint64_t duration) noexcept;
43 void requestFloatingIdle(std::uint64_t tick,
44 const std::array<float, 3>& previousVariation,
45 const std::array<float, 3>& nextVariation) noexcept;
46 [[nodiscard]] bool requestManualMouseMove(std::int32_t deltaX,
47 std::int32_t deltaY, bool verticalOrbit, std::uint64_t tick) noexcept;
48 void releaseManualMouse() noexcept;
49
51 { return current_; }
53 { return move_.start; }
55 { return move_.end; }
56 [[nodiscard]] bool moving() const noexcept { return move_.active; }
57 [[nodiscard]] bool waiting() const noexcept { return waiting_.has_value(); }
59 { return move_.active && move_.interruptible && move_.bezierPosition; }
60 [[nodiscard]] bool manualMouseActive() const noexcept { return manualMouseActive_; }
61
62 private:
63 struct Move
64 {
67 std::uint64_t startTick{};
68 std::uint64_t endTick{};
69 bool active{};
70 bool linear{};
71 bool interruptible{};
72 bool bezierPosition{};
73 std::array<float, 3> control1{};
74 std::array<float, 3> control2{};
75 };
76
77 void startMove(const engine::World3DCamera& target,
78 std::uint64_t tick, bool instant, bool linear = false,
79 std::uint64_t duration = BaseMoveTicks) noexcept;
80 static engine::World3DCamera sample(const Move& move,
81 std::uint64_t tick) noexcept;
82
83 Move move_{};
84 std::optional<engine::World3DCamera> waiting_;
85 engine::World3DCamera current_{};
86 bool manualMouseActive_{};
87 bool manualPresetRequested_{};
88 };
89}
unsigned state
unsigned index
void reset(std::uint64_t tick=0) noexcept
Update tick(std::uint64_t tick) noexcept
const engine::World3DCamera & endCamera() const noexcept
void requestFloatingIdle(std::uint64_t tick, const std::array< float, 3 > &previousVariation, const std::array< float, 3 > &nextVariation) noexcept
void requestPreset(pieces::BoardCameraView view, std::uint64_t tick, bool forceInterrupt=false, bool manualRequest=false) noexcept
const engine::World3DCamera & startCamera() const noexcept
const engine::World3DCamera & current() const noexcept
bool requestManualMouseMove(std::int32_t deltaX, std::int32_t deltaY, bool verticalOrbit, std::uint64_t tick) noexcept
void requestDemoPreset(pieces::BoardCameraView view, std::uint64_t tick, std::uint64_t duration) noexcept
void requestDiceMove(std::uint64_t tick, std::uint8_t randomFourteen) noexcept
bool isPresentationSquareDefault(const display::State &state) noexcept
constexpr std::uint64_t BaseMoveTicks
const engine::World3DCamera & preset(pieces::BoardCameraView view) noexcept
bool isPresentationDefault(const display::State &state) noexcept