载入中...
搜索中...
未找到
EditingProperty.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
7#include "common/Result.h"
8#include "common/Revision.h"
10
11#include <cstddef>
12#include <cstdint>
13#include <optional>
14#include <string>
15#include <utility>
16#include <vector>
17
18namespace eve::editing {
19
21enum class PropertyType {
22 Bool,
23 Int,
24 Float,
25 String,
26 Enum,
27 Color,
28 Vec2,
29 Vec3,
30 Vec4,
34 Struct,
35 Array,
36 Map,
37 Action,
39};
40
42enum class PropertyFlag : std::uint64_t {
43 None = 0,
44 ReadOnly = 1ull << 0,
45 Advanced = 1ull << 1,
46 EditorOnly = 1ull << 2,
47 Runtime = 1ull << 3,
48 Replicated = 1ull << 4,
49 Transient = 1ull << 5,
50 Dangerous = 1ull << 6,
51 MultiEdit = 1ull << 7
52};
53
56 return static_cast<PropertyFlag>(static_cast<std::uint64_t>(left) | static_cast<std::uint64_t>(right));
57}
60 return static_cast<PropertyFlag>(static_cast<std::uint64_t>(left) & static_cast<std::uint64_t>(right));
61}
63constexpr bool hasPropertyFlag(PropertyFlag value, PropertyFlag flag) { return (value & flag) == flag; }
64
67 std::optional<double> minimum;
68 std::optional<double> maximum;
69 std::optional<double> step;
70 std::string units;
71 int precision = 3;
72};
73
89
92public:
98 [[nodiscard]] explicit operator bool() const noexcept { return descriptor_.has_value(); }
100 [[nodiscard]] const PropertyDescriptor& operator*() const { return descriptor_.value(); }
102 [[nodiscard]] const PropertyDescriptor* operator->() const { return &descriptor_.value(); }
104 friend bool operator==(const PropertyDescriptorLookup& lookup, std::nullptr_t) noexcept {
105 return !lookup.descriptor_;
106 }
108 friend bool operator!=(const PropertyDescriptorLookup& lookup, std::nullptr_t) noexcept {
109 return lookup.descriptor_.has_value();
110 }
111
112private:
113 std::optional<PropertyDescriptor> descriptor_;
114};
115
118 std::string typeId;
119 std::uint32_t version = 1;
120 std::vector<PropertyDescriptor> properties;
122 [[nodiscard]] PropertyDescriptorLookup find(const PropertyPath& path) const;
123};
124
127
134
137
140public:
142 virtual ~IPropertyProvider() = default;
144 static CapabilityId editingCapabilityId() { return CapabilityId("eve.editor.target.material-properties"); }
146 [[nodiscard]] virtual eve::Result<eve::Revision> currentRevision(const SelectionSnapshot& selection) const {
147 (void)selection;
151 "Property provider must implement currentRevision; implicit revision zero is not allowed",
152 "authoring.property.current-revision", {}, "authoring.IPropertyProvider"));
153 }
155 virtual PropertySchema schema(const SelectionSnapshot& selection) const = 0;
157 virtual PropertyReadResult read(const SelectionSnapshot& selection, const PropertyPath& path) const = 0;
159 [[nodiscard]] virtual Result<DomainOperation> makeSet(const SelectionSnapshot& selection, const PropertyPath& path,
160 const Value& value, PropertySetMode mode) const = 0;
162 [[nodiscard]] virtual Result<DomainOperation> makeReset(const SelectionSnapshot& selection,
163 const PropertyPath& path) const = 0;
164};
165
168 const Value& value);
176
177} // namespace eve::editing
double value
std::string descriptor
#define EVENGINE_API_PLATFORM
Definition Export.h:107
HexVec3 left
HexVec3 right
std::string path
Definition PlayHost.cpp:110
Move-only, checked operation results for the common layer.
Monotonic state revision for concurrency and change checks.
const UnitySourceAsset & source
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
EVENGINE_API_FOUNDATION public API.
Definition Runtime.h:189
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
The canonical owning dynamic value used by data-facing protocols.
Definition Value.h:31
UI-independent property access for an immutable selection snapshot.
virtual ~IPropertyProvider()=default
Releases IPropertyProvider resources.
virtual Result< DomainOperation > makeSet(const SelectionSnapshot &selection, const PropertyPath &path, const Value &value, PropertySetMode mode) const =0
Make set.
virtual PropertyReadResult read(const SelectionSnapshot &selection, const PropertyPath &path) const =0
Reads read.
virtual eve::Result< eve::Revision > currentRevision(const SelectionSnapshot &selection) const
Current revision.
virtual Result< DomainOperation > makeReset(const SelectionSnapshot &selection, const PropertyPath &path) const =0
Make reset.
static CapabilityId editingCapabilityId()
Stable capability identity for generic property editing.
virtual PropertySchema schema(const SelectionSnapshot &selection) const =0
Schema.
PropertyDescriptorLookup public API.
PropertyDescriptorLookup(PropertyDescriptor descriptor)
Constructs a PropertyDescriptorLookup.
friend bool operator==(const PropertyDescriptorLookup &lookup, std::nullptr_t) noexcept
Operator ==.
friend bool operator!=(const PropertyDescriptorLookup &lookup, std::nullptr_t) noexcept
Operator !=.
const PropertyDescriptor & operator*() const
Operator *.
const PropertyDescriptor * operator->() const
Operator ->.
PropertyDescriptorLookup()=default
Constructs a PropertyDescriptorLookup.
Dotted property path (layout.size) compared and persisted as text.
Definition EditingIds.h:78
Deterministic owning value tree shared by authoring hosts.
eve::Value toPresentationValue(const Value &value)
To presentation value.
PropertyType
PropertyType public API.
PropertySetMode
PropertySetMode public API.
PropertyFlag
PropertyFlag public API.
StrongId< CapabilityIdTag > CapabilityId
Definition EditingIds.h:61
Result< void > validatePropertyValue(const PropertyDescriptor &descriptor, const Value &value)
Validate property value.
Value toEditingValue(const eve::Value &value)
To editing value.
property_access::PropertyDescriptor toPresentationDescriptor(const PropertyDescriptor &source)
To presentation descriptor.
PropertyReadState
PropertyReadState public API.
constexpr bool hasPropertyFlag(PropertyFlag value, PropertyFlag flag)
True when property flag.
NumericMetadata public API.
std::optional< double > maximum
std::optional< double > step
std::optional< double > minimum
PropertyDescriptor public API.
std::vector< RuleId > validators
std::vector< std::string > enumItems
std::vector< std::string > assetTypeFilters
PropertyReadResult public API.
std::vector< Diagnostic > diagnostics
EVENGINE_API_PLATFORM public API.
std::vector< PropertyDescriptor > properties
SelectionSnapshot public API.
One stable property description consumed by any UI shell.