载入中...
搜索中...
未找到
EditorBuildingTarget.h
浏览该文件的文档.
1#pragma once
2
4#include "common/Export.h"
6#include "editor/EditorTool.h"
7
8#include <memory>
9#include <optional>
10
11namespace eve::editor {
17
20 std::array<double, 3> origin{0.0, 0.0, 0.0};
21 std::array<double, 3> direction{0.0, 0.0, -1.0};
22};
23
31public:
33 virtual ~IBuildingViewportAdapter() = default;
34
37 const EditorPointerEvent& event) const = 0;
40 const std::array<double, 3>& world) const = 0;
41};
42
45 std::string buildingId;
47 std::vector<building_editing::BuildingEdgeCurvePoint> controlPoints;
48 int subdivisions = 16;
49 std::string surfaceName;
50};
51
61public:
64 editing::IEditAuthority* authority);
65
67 const ToolDescriptor& descriptor() const override { return descriptor_; }
69 void setViewportAdapter(IBuildingViewportAdapter* viewport);
71 void setAuthority(editing::IEditAuthority* authority);
73 [[nodiscard]] editing::Result<void> setSelection(BuildingEdgeCurveToolSelection selection);
75 void clearSelection();
76
79 const EditorPointerEvent& event) override;
81 void deactivate(EditorContext& context) override;
83 void cancel(EditorContext& context) override;
85 void drawOverlay(EditorContext& context, IEditorOverlay& overlay) override;
86
88 bool isDragging() const;
90 const std::optional<building_editing::BuildingEdgeCurveDragPreview>& preview() const {
91 return preview_;
92 }
94 const std::optional<editing::TransactionReceipt>& lastReceipt() const {
95 return lastReceipt_;
96 }
98 editing::Status lastStatus() const { return lastStatus_; }
100 const std::vector<editing::Diagnostic>& diagnostics() const { return diagnostics_; }
101
102private:
103 void recordFailure(const editing::Status& status,
104 const std::vector<editing::Diagnostic>& diagnostics);
105 void recordPreview(building_editing::BuildingEdgeCurveDragPreview preview);
107 ToolResponse move(const EditorPointerEvent& event);
109
110 ToolDescriptor descriptor_{"building.edge-curve", "Edit Building Curve", {}};
111 IBuildingViewportAdapter* viewport_ = nullptr;
112 editing::IEditAuthority* authority_ = nullptr;
113 std::optional<BuildingEdgeCurveToolSelection> selection_;
114 std::unique_ptr<building_editing::BuildingEdgeCurveDragSession> drag_;
115 std::optional<building_editing::BuildingEdgeCurveDragPreview> preview_;
116 std::optional<editing::TransactionReceipt> lastReceipt_;
117 editing::Status lastStatus_ = editing::Status::NotFound;
118 std::vector<editing::Diagnostic> diagnostics_;
119 std::uint64_t transactionSequence_ = 0;
120};
121}
#define EVENGINE_API_EDITORS
Definition Export.h:112
wgpu::PopErrorScopeStatus status
World3D * world
float begin
const VegetationPresetContext & context
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Live PlacementWorld target with reversible place/move/remove operations.
Final validation and commit boundary for editor mutations.
EditorSession tool that turns one curve-handle drag into one authority transaction.
editing::Status lastStatus() const
Status of the latest tool operation.
const std::optional< editing::TransactionReceipt > & lastReceipt() const
Last committed authority receipt.
const std::vector< editing::Diagnostic > & diagnostics() const
Diagnostics from the latest preview, adapter or authority operation.
const ToolDescriptor & descriptor() const override
Descriptor.
const std::optional< building_editing::BuildingEdgeCurveDragPreview > & preview() const
Last valid transient preview.
Context supplied by EditorSession to tools.
Definition EditorTool.h:71
Host-owned conversion boundary between pointer coordinates and a 2D/3D viewport.
virtual editing::Result< OverlayPoint > projectWorld(const std::array< double, 3 > &world) const =0
Project a world position into the coordinate space accepted by IEditorOverlay.
virtual ~IBuildingViewportAdapter()=default
Releases IBuildingViewportAdapter resources.
virtual editing::Result< BuildingViewportRay > pointerRay(const EditorPointerEvent &event) const =0
Build a world ray for one normalized pointer event.
Sink implemented by a 2D or 3D viewport to render tool feedback.
Protocol implemented by every editor tool.
Definition EditorTool.h:110
StatusCode
Stable outcome category for an operation.
Definition Status.h:27
Immutable result of one curve-handle pointer update.
One occupied or rejected footprint cell in a placement preview.
Persistent garrison member copied through building editor undo.
Complete runtime-neutral placed-building snapshot.
Structured footprint/snap preview tied to a world revision.
Immutable selection/configuration consumed by BuildingEdgeCurveTool.
std::vector< building_editing::BuildingEdgeCurvePoint > controlPoints
World-space ray produced by a building editor viewport.
Pointer input normalized by an editor viewport adapter.
Definition EditorTool.h:20
UI-facing metadata supplied by a tool implementation.
Definition EditorTool.h:98
Result returned by a tool after processing input.
Definition EditorTool.h:50