Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
SequenceWorld3DSlot.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "RenderSlots.hpp"
7
8#include <cstddef>
9#include <cstdint>
10#include <expected>
11#include <map>
12#include <memory>
13#include <optional>
14#include <vector>
15
16namespace monopoly::engine
17{
19
25
27 {
30 std::uint16_t priority{};
31 std::int32_t clock{};
33 std::shared_ptr<const data::MeshRuntimeAsset> asset;
34 std::optional<sequence::SequenceBounds3D> sequenceBounds;
35 std::optional<World3DRect> screenBounds;
36 std::shared_ptr<const data::MeshRenderData> renderData;
37 };
38
39 // Resolves the historical SetCamera render-slot state. A labelled
40 // camera with no current label owner intentionally returns nullopt so the
41 // caller can preserve the previously installed camera, matching ArtLib.
43 const sequence::SequenceCamera3DView& camera) noexcept;
44 [[nodiscard]] std::optional<World3DCamera> resolveWorld3DCamera(
45 const sequence::SetCameraCommand& command,
46 const sequence::SequenceRuntime& runtime) noexcept;
47
49 {
50 std::size_t started{};
51 std::size_t moved{};
52 std::size_t stopped{};
53 std::size_t unchanged{};
54 };
55
56 // CPU-side ownership/lifecycle boundary for historical render slot 1.
57 // SequenceStartUp => create entry; SequenceMoved => update matrix/state;
58 // SequenceShutDown => remove entry. GPU resources remain outside this type.
60 {
61 public:
62 [[nodiscard]] static constexpr RenderSlot slot() noexcept
63 { return RenderSlot::World3D; }
64
65 [[nodiscard]] std::expected<SequenceWorld3DSyncStats,
67 const std::vector<sequence::SequenceMeshRenderItem>& items);
68
69 [[nodiscard]] std::expected<std::size_t, World3DProjectionError>
70 configureView(World3DRect viewport, World3DCamera camera = {});
71 void clearView() noexcept;
72
73 void clear() noexcept;
74 [[nodiscard]] std::size_t size() const noexcept;
75 [[nodiscard]] const SequenceWorld3DObject* find(
76 sequence::SequenceNodeId node) const noexcept;
77 [[nodiscard]] std::vector<sequence::SequenceNodeId> order() const;
78 [[nodiscard]] std::vector<sequence::SequenceNodeId> visibleOrder() const;
79 [[nodiscard]] const std::optional<World3DProjectionState>&
81 [[nodiscard]] bool boundsVisible(
82 const sequence::SequenceBounds3D& bounds,
83 const sequence::Matrix3D& worldTransform) const noexcept;
84
85 private:
86 void refreshBounds(SequenceWorld3DObject& object) noexcept;
87 void refreshAllBounds() noexcept;
88
89 std::map<sequence::SequenceNodeId, SequenceWorld3DObject> objects_;
90 std::vector<sequence::SequenceNodeId> order_;
91 std::optional<World3DProjectionState> view_;
92 };
93}
unsigned index
static constexpr RenderSlot slot() noexcept
const SequenceWorld3DObject * find(sequence::SequenceNodeId node) const noexcept
std::vector< sequence::SequenceNodeId > visibleOrder() const
std::expected< SequenceWorld3DSyncStats, SequenceWorld3DSlotError > sync(const std::vector< sequence::SequenceMeshRenderItem > &items)
const std::optional< World3DProjectionState > & view() const noexcept
bool boundsVisible(const sequence::SequenceBounds3D &bounds, const sequence::Matrix3D &worldTransform) const noexcept
std::expected< std::size_t, World3DProjectionError > configureView(World3DRect viewport, World3DCamera camera={})
std::vector< sequence::SequenceNodeId > order() const
std::uint32_t DataId
Definition DataBanks.hpp:10
std::optional< World3DCamera > resolveWorld3DCamera(const sequence::SetCameraCommand &command, const sequence::SequenceRuntime &runtime) noexcept
World3DCamera world3DCameraFromSequence(const sequence::SequenceCamera3DView &camera) noexcept
std::uint64_t SequenceNodeId
std::shared_ptr< const data::MeshRuntimeAsset > asset
std::optional< sequence::SequenceBounds3D > sequenceBounds
std::shared_ptr< const data::MeshRenderData > renderData