载入中...
搜索中...
未找到
SceneTarget.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/ECS.h"
8
9#include <map>
10#include <memory>
11#include <string>
12#include <vector>
13
14namespace eve::scene_editing {
15
17
20 ObjectId id;
21 ObjectId parent;
22 std::string name;
24};
25
28 ObjectId id;
29 ObjectId parent;
30 std::string name;
32};
33
36public:
38 virtual ~ISceneHierarchyEditTarget() = default;
40 static CapabilityId editorCapabilityId() { return CapabilityId("eve.editor.target.scene-hierarchy"); }
42 virtual Result<SceneObjectSnapshot> sceneObject(const ObjectId& id) const = 0;
44 virtual std::vector<ObjectId> sceneChildren(const ObjectId& parent) const = 0;
48 virtual Result<DomainOperation> makeDelete(const ObjectId& id) const = 0;
50 virtual Result<DomainOperation> makeRename(const ObjectId& id, const std::string& name) const = 0;
52 virtual Result<DomainOperation> makeReparent(const ObjectId& id, const ObjectId& parent) const = 0;
53};
54
57 std::string kind;
58 int syncMode = 0;
59 bool targetAlive = false;
60};
61
64public:
66 virtual ~ISceneComponentInspector() = default;
68 static CapabilityId editorCapabilityId() { return CapabilityId("eve.editor.target.scene-components"); }
71 const ObjectId& object) const = 0;
72};
73
81 public virtual IEditableTarget,
87public:
89 SceneTargetBase(std::string id, std::string type);
91 ~SceneTargetBase() override = default;
92
94 TargetId targetId() const override { return TargetId(id_); }
96 TargetDescriptor describe() const override;
99 void* queryCapability(const CapabilityId& capability) override;
101 Result<void> applyDomainOperation(const DomainOperation& operation) override;
103 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
105 [[nodiscard]] Result<void> commitDomainState(std::unique_ptr<IDomainOperationTarget> candidate) override;
106
108 Result<SceneObjectSnapshot> sceneObject(const ObjectId& id) const override;
110 std::vector<ObjectId> sceneChildren(const ObjectId& parent) const override;
112 Result<DomainOperation> makeCreate(const CreateSceneObjectRequest& request) const override;
114 Result<DomainOperation> makeDelete(const ObjectId& id) const override;
116 Result<DomainOperation> makeRename(const ObjectId& id, const std::string& name) const override;
118 Result<DomainOperation> makeReparent(const ObjectId& id, const ObjectId& parent) const override;
120 Result<SceneTransformValue> readTransform(const ObjectId& id) const override;
122 Result<DomainOperation> makeSetTransform(const ObjectId& id,
123 const SceneTransformValue& transform) const override;
125 void bindComponentPayloads(SceneComponentPayloadRegistry* registry) { componentPayloads_ = registry; }
127 EditorValue snapshotValue() const override;
138 [[nodiscard]] Result<DomainOperation> makeRestore(const EditorValue& snapshot) const;
139
140private:
143 static EditorValue transformValue(const SceneTransformValue& transform);
145 static Result<SceneTransformValue> parseTransform(const EditorValue& value);
147 static Result<SceneObjectSnapshot> parseObject(const EditorValue& value);
149 static EditorValue objectValue(const SceneObjectSnapshot& object);
151
152 std::string id_;
153 std::string type_;
154 std::map<ObjectId, SceneObjectSnapshot> objects_;
155 SceneComponentPayloadRegistry* componentPayloads_ = nullptr;
156};
157
160public:
162 explicit SceneDocumentTarget(std::string id) : SceneTargetBase(std::move(id), "scene-document") {}
163};
164
167public:
169 explicit RuntimeWorldTarget(std::string id) : SceneTargetBase(std::move(id), "runtime-world") {}
170};
171
172} // namespace eve::scene_editing
173
174namespace eve::scene {
175class SceneHost;
176}
177
178namespace eve::scene_editing {
179
194public:
202 Result<void> applyDomainOperation(const DomainOperation& operation) override;
204 void* queryCapability(const CapabilityId& capability) override;
206 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
208 [[nodiscard]] Result<void> commitDomainState(
209 std::unique_ptr<IDomainOperationTarget> candidate) override;
215 [[nodiscard]] scene::SceneHost* host() const;
217 const ObjectId& object) const override;
218
219private:
220 Result<void> synchronizeHost(const SceneTargetBase& desired);
221 ecs::EntityHandle hostHandle_{};
222 bool staging_ = false;
223};
224
231
234public:
236 Result<DomainOperation> planDelete(IEditableTarget& target, const ObjectId& object) const;
238 Result<DomainOperation> planRename(IEditableTarget& target, const ObjectId& object,
239 const std::string& name) const;
241 Result<DomainOperation> planReparent(IEditableTarget& target, const ObjectId& object,
242 const ObjectId& parent) const;
243};
244
247public:
249 Result<DomainOperation> plan(IEditableTarget& target, const ObjectId& object,
250 const SceneTransformValue& transform) const;
251};
252
255public:
257 explicit ScenePropertyProvider(const SceneTargetBase* target) : target_(target) {}
258
260 eve::Result<eve::Revision> currentRevision(const SelectionSnapshot& selection) const override;
262 PropertySchema schema(const SelectionSnapshot& selection) const override;
264 PropertyReadResult read(const SelectionSnapshot& selection, const PropertyPath& path) const override;
266 Result<DomainOperation> makeSet(const SelectionSnapshot& selection, const PropertyPath& path,
267 const EditorValue& value, PropertySetMode mode) const override;
269 Result<DomainOperation> makeReset(const SelectionSnapshot& selection,
270 const PropertyPath& path) const override;
271
272private:
273 const SceneTargetBase* target_ = nullptr;
274};
275
276} // namespace eve::scene_editing
LogicalId target
ActionParameterOperation operation
double value
#define EVENGINE_API_BACKENDS
Definition Export.h:108
const GltfImportRequest & request
std::int32_t parent
std::string name
std::string path
Definition PlayHost.cpp:110
std::string id
Definition PlayHost.cpp:108
UIHostHandle host
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.
Optional capability exposing a deterministic, persistence-safe editing snapshot.
UI-independent property access for an immutable selection snapshot.
Dotted property path (layout.size) compared and persisted as text.
Definition EditingIds.h:78
Deterministic owning value tree shared by authoring hosts.
ECS mount point for one scene graph (full scene or nested subtree root). Isomorphic to eve::ui::UIHos...
Definition SceneHost.h:89
Read-only live component/link inspection capability for scene inspectors.
Definition SceneTarget.h:63
static CapabilityId editorCapabilityId()
Stable capability id for component/link metadata inspection.
Definition SceneTarget.h:68
virtual Result< std::vector< SceneComponentLinkSnapshot > > componentLinks(const ObjectId &object) const =0
Enumerate safe link metadata without exposing runtime pointers.
virtual ~ISceneComponentInspector()=default
Releases ISceneComponentInspector resources.
Stable hierarchy capability implemented by document and runtime targets.
Definition SceneTarget.h:35
static CapabilityId editorCapabilityId()
Stable capability identity used instead of cross-module RTTI.
Definition SceneTarget.h:40
virtual std::vector< ObjectId > sceneChildren(const ObjectId &parent) const =0
Return child identities in deterministic order.
virtual Result< SceneObjectSnapshot > sceneObject(const ObjectId &id) const =0
Return an immutable object snapshot.
virtual ~ISceneHierarchyEditTarget()=default
Releases ISceneHierarchyEditTarget resources.
virtual Result< DomainOperation > makeReparent(const ObjectId &id, const ObjectId &parent) const =0
Build a reversible hierarchy reparent operation.
virtual Result< DomainOperation > makeDelete(const ObjectId &id) const =0
Build a reversible delete operation for a leaf object.
virtual Result< DomainOperation > makeCreate(const CreateSceneObjectRequest &request) const =0
Build a reversible create operation without applying it.
virtual Result< DomainOperation > makeRename(const ObjectId &id, const std::string &name) const =0
Build a reversible object rename operation.
Capability implemented by document and live scene targets.
Live game-world backend exposing the same standard scene capabilities.
RuntimeWorldTarget(std::string id)
Constructs a RuntimeWorldTarget.
Non-owning registry and scene-facing router for component payload providers.
Authoring scene-document backend exposing the standard scene capabilities.
SceneDocumentTarget(std::string id)
Constructs a SceneDocumentTarget.
Backend-neutral hierarchy editing logic for outliner-style tools.
Optional live adapter mirroring editor operations into one SceneHost.
Backend-neutral placement logic suitable for a Tool, script or command handler.
Property adapter exposing scene TRS to generic inspector presenters.
ScenePropertyProvider(const SceneTargetBase *target)
Scene property provider.
Shared in-memory scene target implementation for document/runtime adapters.
Definition SceneTarget.h:86
void bindComponentPayloads(SceneComponentPayloadRegistry *registry)
Bind an optional non-owning registry used by component inspectors.
~SceneTargetBase() override=default
Scene target base.
TargetId targetId() const override
Target id.
Definition SceneTarget.h:94
Backend-neutral transform logic suitable for a Tool, script or command handler.
scene_editing::SceneComponentPayloadRegistry SceneComponentPayloadRegistry
DomainOperation public API.
PropertyReadResult public API.
EVENGINE_API_PLATFORM public API.
SelectionSnapshot public API.
Stable discovery metadata exposed by every editable target.
Request used to create a scene object in either backend.
Definition SceneTarget.h:27
Safe metadata for one external component link on a live scene object.
Definition SceneTarget.h:56
Immutable scene object snapshot returned across target boundaries.
Definition SceneTarget.h:19
Serializable transform exchanged across the scene editing boundary.