载入中...
搜索中...
未找到
MaterialEditingCommands.cpp
浏览该文件的文档.
2
4
5namespace eve::material_editing {
6namespace {
7
8const editing::Value* field(const editing::Value& value, const char* key) {
9 const auto* object = value.getIf<editing::Value::Object>();
10 if (!object) return nullptr;
11 const auto found = object->find(key);
12 return found == object->end() ? nullptr : &found->second;
13}
14
15editing::SelectionSnapshot selectionFor(editing::IEditableTarget& target) {
16 editing::SelectionSnapshot selection;
17 selection.channel = "asset";
18 editing::SelectionItem item;
20 item.target = editing::TargetId(target.targetId());
21 item.item = editing::StableId(target.targetId().value());
22 item.type = "graphics.material";
23 selection.items.push_back(item);
24 selection.primary = item;
25 return selection;
26}
27
28} // namespace
29
32 descriptor.id = editing::CommandId("material.property.set.v1");
33 descriptor.ownerModule = "material_editing";
34 descriptor.displayName = "Set material property";
35 descriptor.category = "Material";
36 descriptor.automationAllowed = true;
37 return registry.registerPlannedCommand(
39 auto* properties = static_cast<editing::IPropertyProvider*>(
41 const editing::Value* pathValue = field(request.payload, "path");
42 const auto* path = pathValue ? pathValue->getIf<std::string>() : nullptr;
43 const editing::Value* value = field(request.payload, "value");
44 if (!properties || !path || !value)
45 return eve::editing::failed<editing::CommandPlan>(
46 editing::Status::Rejected, editing::RuleId("material.editing.property-payload"),
47 "Material property requires a property target, path and value");
48 auto operation = properties->makeSet(selectionFor(target), editing::PropertyPath(*path), *value,
50 if (!operation.ok())
51 return eve::editing::failed<editing::CommandPlan>(
52 operation.code(), editing::RuleId("material.editing.property-operation"),
53 "Material target rejected the property value");
55 plan.operations.push_back(std::move(operation.value()));
56 plan.summary = editing::Value::Object{{"path", *path}};
57 return eve::editing::applied<editing::CommandPlan>(std::move(plan));
58 });
59}
60
61} // namespace eve::material_editing
LogicalId target
ActionParameterOperation operation
double value
std::string descriptor
const GltfImportRequest & request
std::uint32_t key
std::map< std::string, PropertyRule > properties
std::string path
Definition PlayHost.cpp:110
bool found
Move-only operation result carrying either a value or Status.
Definition Result.h:155
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
IEditableTarget public API.
Lower-layer registration boundary implemented by an editor or runtime editing host.
virtual Result< void > registerPlannedCommand(EditingCommandDescriptor descriptor, EditingCommandPlanner planner)=0
Register or replace one domain-owned planned command.
UI-independent property access for an immutable selection snapshot.
static CapabilityId editingCapabilityId()
Stable capability identity for generic property editing.
Dotted property path (layout.size) compared and persisted as text.
Definition EditingIds.h:78
Deterministic owning value tree shared by authoring hosts.
std::map< std::string, Value > Object
const T * getIf() const
Return an immediately borrowed typed value.
StrongId< TargetIdTag > TargetId
Definition EditingIds.h:57
StrongId< StableIdTag > StableId
Definition EditingIds.h:64
StrongId< CommandIdTag > CommandId
Definition EditingIds.h:58
editing::Result< void > registerEditingCommands(editing::IEditingCommandRegistry &registry)
Register Material-owned property commands with a generic editing host.
const EditorValue * field(const EditorValue &value, const char *name)
CommandPlan public API.
std::vector< DomainOperation > operations
CommandRequest public API.
Domain-owned metadata for one planned editing command.