载入中...
搜索中...
未找到
MapDocument.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6
7#include <map>
8#include <memory>
9#include <string>
10#include <vector>
11
12namespace eve::map_editing {
13
16 StableId id;
17 std::string name;
18 std::string kind = "tile";
19 bool visible = true;
20 bool locked = false;
21 double opacity = 1.0;
22 int order = 0;
23};
24
27 StableId id;
28 double x = 0.0;
29 double y = 0.0;
30 double z = 0.0;
31 double width = 4.0;
32};
33
36 StableId id;
37 StableId layer;
38 std::string name;
39 std::string materialAsset;
40 bool closed = false;
41 std::vector<MapSplinePointRecord> points;
42};
43
46 StableId id;
47 StableId layer;
48 std::string asset;
49 double x = 0.0;
50 double y = 0.0;
51 double z = 0.0;
52 double rotationX = 0.0;
53 double rotationY = 0.0;
54 double rotationZ = 0.0;
55 double scaleX = 1.0;
56 double scaleY = 1.0;
57 double scaleZ = 1.0;
58};
59
62 EditorStatus status = EditorStatus::Failed;
64 StableId road;
65 double centerlineLength = 0.0;
67 std::vector<EditorDiagnostic> diagnostics;
68};
69
72public:
74 virtual ~IMapRoadMeshSink() = default;
76 virtual Result<void> publishRoad(const std::string& document, const StableId& road, Revision revision,
77 const EditorValue& mesh) = 0;
79 virtual Result<void> removeRoad(const std::string& document, const StableId& road) = 0;
80};
81
84 std::string sourceId;
85 std::string asset;
86 double x = 0.0, y = 0.0, z = 0.0;
87 double rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0;
88 double scaleX = 1.0, scaleY = 1.0, scaleZ = 1.0;
89};
90
93 EditorStatus status = EditorStatus::Failed;
95 std::vector<DomainOperation> operations;
96 std::vector<EditorDiagnostic> diagnostics;
97};
98
101public:
103 virtual ~IMapStructureEditTarget() = default;
105 static CapabilityId editorCapabilityId() { return CapabilityId("eve.editor.target.map-structure"); }
107 virtual std::vector<MapLayerRecord> mapLayers() const = 0;
109 virtual std::vector<MapRoadRecord> mapRoads() const = 0;
111 virtual std::vector<MapPlacementRecord> mapPlacements() const = 0;
115 virtual Result<DomainOperation> makeDeleteLayer(const StableId& layer) const = 0;
119 virtual Result<DomainOperation> makeSetRoad(const MapRoadRecord& road) const = 0;
121 virtual Result<DomainOperation> makeDeleteRoad(const StableId& road) const = 0;
125 virtual Result<DomainOperation> makeDeletePlacement(const StableId& placement) const = 0;
126};
127
130 public virtual IEditableTarget,
134public:
136 explicit MapDocumentTarget(std::string id);
138 TargetId targetId() const override { return TargetId(id_); }
140 TargetDescriptor describe() const override;
143 void* queryCapability(const CapabilityId& capability) override;
145 Result<void> applyDomainOperation(const DomainOperation& operation) override;
147 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
149 [[nodiscard]] Result<void> commitDomainState(std::unique_ptr<IDomainOperationTarget> candidate) override;
150
152 std::vector<MapLayerRecord> mapLayers() const override;
154 std::vector<MapRoadRecord> mapRoads() const override;
156 std::vector<MapPlacementRecord> mapPlacements() const override;
158 Result<DomainOperation> makeCreateLayer(const MapLayerRecord& layer) const override;
160 Result<DomainOperation> makeDeleteLayer(const StableId& layer) const override;
162 Result<DomainOperation> makeSetLayer(const MapLayerRecord& layer) const override;
164 Result<DomainOperation> makeSetRoad(const MapRoadRecord& road) const override;
166 Result<DomainOperation> makeDeleteRoad(const StableId& road) const override;
168 Result<DomainOperation> makeSetPlacement(const MapPlacementRecord& placement) const override;
170 Result<DomainOperation> makeDeletePlacement(const StableId& placement) const override;
171
173 std::vector<EditorDiagnostic> validate() const;
175 MapRoadPreviewResult previewRoad(const StableId& road, int triangleBudget = 10000) const;
177 EditorValue snapshotValue() const;
179 Result<void> loadSnapshot(const EditorValue& snapshot);
180
181private:
182 std::string id_;
183 std::map<StableId, MapLayerRecord> layers_;
184 std::map<StableId, MapRoadRecord> roads_;
185 std::map<StableId, MapPlacementRecord> placements_;
186};
187
190public:
192 Result<void> publish(const MapDocumentTarget& document, const StableId& road, Revision expectedRevision,
193 IMapRoadMeshSink& sink, int triangleBudget = 10000) const;
194};
195
198public:
200 MapObjectImportPlan plan(const MapDocumentTarget& document, const StableId& layer,
201 const std::vector<MapObjectImportRecord>& records, const std::string& idPrefix) const;
202};
203
204} // namespace eve::map_editing
ActionParameterOperation operation
#define EVENGINE_API_WORLD
Definition Export.h:109
TileLayer * layer
std::uint64_t revision
Mesh * mesh
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Dirty region and revision shared by every editable document target.
Optional candidate/publish capability for atomic domain operations.
Editable-target capability that applies owning domain operations.
IEditableTarget public API.
Deterministic owning value tree shared by authoring hosts.
Runtime-neutral sink receiving revision-tagged generated road meshes.
Definition MapDocument.h:71
virtual Result< void > removeRoad(const std::string &document, const StableId &road)=0
Remove a previously published road mesh.
virtual ~IMapRoadMeshSink()=default
Releases IMapRoadMeshSink resources.
virtual Result< void > publishRoad(const std::string &document, const StableId &road, Revision revision, const EditorValue &mesh)=0
Atomically publish or replace one generated road mesh.
Layer, spline and placement editing capability for map presenters.
virtual Result< DomainOperation > makeCreateLayer(const MapLayerRecord &layer) const =0
Plan reversible layer creation.
virtual std::vector< MapLayerRecord > mapLayers() const =0
Enumerate layers in visual order.
virtual std::vector< MapRoadRecord > mapRoads() const =0
Enumerate roads in stable id order.
virtual ~IMapStructureEditTarget()=default
Releases IMapStructureEditTarget resources.
static CapabilityId editorCapabilityId()
Stable capability id for map structure operations.
virtual Result< DomainOperation > makeSetLayer(const MapLayerRecord &layer) const =0
Plan reversible layer metadata replacement.
virtual Result< DomainOperation > makeDeletePlacement(const StableId &placement) const =0
Plan reversible placement deletion.
virtual Result< DomainOperation > makeSetRoad(const MapRoadRecord &road) const =0
Plan reversible road creation or replacement.
virtual Result< DomainOperation > makeSetPlacement(const MapPlacementRecord &placement) const =0
Plan reversible placement creation or replacement.
virtual std::vector< MapPlacementRecord > mapPlacements() const =0
Enumerate placements in stable id order.
virtual Result< DomainOperation > makeDeleteRoad(const StableId &road) const =0
Plan reversible road deletion.
virtual Result< DomainOperation > makeDeleteLayer(const StableId &layer) const =0
Plan deletion of an empty layer.
UI-neutral map structure document with reversible domain operations.
TargetId targetId() const override
Target id.
Converts external object records into one atomic placement transaction plan.
Publishes validated road previews while rejecting stale document revisions.
StatusCode
Stable outcome category for an operation.
Definition Status.h:27
detail::StrongUint64< detail::RevisionTag > Revision
Monotonic content/state revision used for optimistic-concurrency checks.
Definition Revision.h:13
DomainOperation public API.
Stable discovery metadata exposed by every editable target.
Stable map layer descriptor used by outliner presenters.
Definition MapDocument.h:15
Side-effect-free batch import plan for map object placements.
Definition MapDocument.h:92
std::vector< DomainOperation > operations
Definition MapDocument.h:95
std::vector< EditorDiagnostic > diagnostics
Definition MapDocument.h:96
Imported object record before stable placement ids are assigned.
Definition MapDocument.h:83
Stable object placement stored on an object layer.
Definition MapDocument.h:45
Deterministic renderer-neutral road strip preview.
Definition MapDocument.h:61
std::vector< EditorDiagnostic > diagnostics
Definition MapDocument.h:67
Road spline authoring record independent from rendering/mesh generation.
Definition MapDocument.h:35
std::vector< MapSplinePointRecord > points
Definition MapDocument.h:41
Stable editable control point in a road or path spline.
Definition MapDocument.h:26