载入中...
搜索中...
未找到
MaterialTarget.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
9
10#include <map>
11#include <string>
12#include <vector>
13
14namespace eve::material_editing {
15
16using editing::CapabilityId; using editing::DiagnosticSeverity; using editing::DomainOperation;
17using editing::EditRegion; using editing::IDomainOperationTarget; using editing::IDomainOperationTargetStaging;
18using editing::IEditableTarget; using editing::IPropertyProvider; using editing::PropertyDescriptor;
19using editing::PropertyFlag; using editing::PropertyPath; using editing::PropertyReadResult;
20using editing::PropertyReadState; using editing::PropertySchema; using editing::PropertySetMode;
21using editing::PropertyType; using editing::RuleId; using editing::SelectionSnapshot; using editing::TargetDescriptor;
23using editing::Result;
24using EditorStatus = editing::Status; using EditorValue = editing::Value; using EditorDiagnostic = editing::Diagnostic;
25
28 public virtual IEditableTarget,
32 public IPropertyProvider {
33public:
35 explicit MaterialDocumentTarget(std::string id);
36
38 TargetId targetId() const override { return TargetId(id_); }
40 TargetDescriptor describe() const override;
42 void* queryCapability(const CapabilityId& capability) override;
44 Result<void> applyDomainOperation(const DomainOperation& operation) override;
46 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
48 [[nodiscard]] Result<void> commitDomainState(
49 std::unique_ptr<IDomainOperationTarget> candidate) override;
50
52 eve::Result<eve::Revision> currentRevision(const SelectionSnapshot& selection) const override;
54 PropertySchema schema(const SelectionSnapshot& selection) const override;
56 PropertyReadResult read(const SelectionSnapshot& selection, const PropertyPath& path) const override;
58 Result<DomainOperation> makeSet(const SelectionSnapshot& selection, const PropertyPath& path,
59 const EditorValue& value, PropertySetMode mode) const override;
61 Result<DomainOperation> makeReset(const SelectionSnapshot& selection,
62 const PropertyPath& path) const override;
63
65 EditorValue snapshotValue() const override;
67 Result<void> loadSnapshot(const EditorValue& snapshot);
69 std::vector<EditorDiagnostic> validate() const;
70
71private:
73 static PropertySchema materialSchema();
74 static std::map<std::string, EditorValue> defaults();
76 static Result<void> validateAssignment(const PropertyDescriptor& descriptor,
77 const EditorValue& value);
79 bool selectionMatches(const SelectionSnapshot& selection) const;
80
81 std::string id_;
82 std::map<std::string, EditorValue> values_;
83};
84
87public:
89 virtual ~IMaterialRuntimeSink() = default;
91 virtual Result<void> publish(const MaterialDocumentTarget& candidate) = 0;
92};
93
97public:
101 TargetId targetId() const override { return TargetId(document_.targetId()); }
103 std::uint64_t revision() const override { return document_.revision(); }
105 EditRegion dirtyRegion() const override { return document_.dirtyRegion(); }
107 void clearDirtyRegion() override { document_.clearDirtyRegion(); }
109 TargetDescriptor describe() const override;
115 void* queryCapability(const CapabilityId& capability) override;
117 Result<void> applyDomainOperation(const DomainOperation& operation) override;
119 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
121 [[nodiscard]] Result<void> commitDomainState(
122 std::unique_ptr<IDomainOperationTarget> candidate) override;
126 const MaterialDocumentTarget& authoringTarget() const { return document_; }
134 [[nodiscard]] Result<void> reloadSnapshot(const EditorValue& snapshot);
135
136private:
137 MaterialDocumentTarget document_;
138 IMaterialRuntimeSink* sink_ = nullptr;
139 bool staging_ = false;
140};
141
142} // namespace eve::material_editing
143
144namespace eve::graphics {
145class Renderable3D;
146class Texture;
147class Shader;
148}
149
150namespace eve::material_editing {
151
154public:
156 virtual ~IMaterialRuntimeAssetResolver() = default;
158 virtual Result<graphics::Texture*> resolveTexture(const std::string& asset) const = 0;
160 virtual Result<graphics::Shader*> resolveShader(const std::string& asset) const = 0;
161};
162
165public:
167 Renderable3DMaterialRuntimeSink(graphics::Renderable3D* renderable,
168 const IMaterialRuntimeAssetResolver* assets);
170 ~Renderable3DMaterialRuntimeSink() override;
172 Result<void> publish(const MaterialDocumentTarget& candidate) override;
173
174private:
175 struct Impl;
176 std::unique_ptr<Impl> impl_;
177};
178
179} // namespace eve::material_editing
ActionParameterOperation operation
double value
std::string descriptor
#define EVENGINE_API_BACKENDS
Definition Export.h:108
#define EVENGINE_API_WORLD
Definition Export.h:109
std::string path
Definition PlayHost.cpp:110
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.
Atomic runtime publication boundary for a complete material candidate.
virtual Result< void > publish(const MaterialDocumentTarget &candidate)=0
Publish a candidate; failure must leave the runtime material unchanged.
virtual ~IMaterialRuntimeSink()=default
Releases IMaterialRuntimeSink resources.
UI-neutral, serializable material authoring target.
TargetId targetId() const override
Target id.
Candidate-first material operation target with live commit/undo publication.
EditRegion dirtyRegion() const override
Dirty region.
std::uint64_t revision() const override
Revision.
void clearDirtyRegion() override
Clears dirty region.
const MaterialDocumentTarget & authoringTarget() const
Immutable authoring document used by validators and previews.
MaterialDocumentTarget & authoringTarget()
Mutable authoring document used by property inspectors.
TargetId targetId() const override
Target id.
eve::Severity DiagnosticSeverity
StrongId< TargetIdTag > TargetId
Definition EditingIds.h:57
eve::Diagnostic Diagnostic
PropertyType
PropertyType public API.
StrongId< RuleIdTag > RuleId
Definition EditingIds.h:60
PropertySetMode
PropertySetMode public API.
PropertyFlag
PropertyFlag public API.
eve::StatusCode Status
StrongId< CapabilityIdTag > CapabilityId
Definition EditingIds.h:61
eve::Result< T > Result
PropertyReadState
PropertyReadState public API.
material_editing::IMaterialRuntimeAssetResolver IMaterialRuntimeAssetResolver
material_editing::IMaterialRuntimeSink IMaterialRuntimeSink
material_editing::Renderable3DMaterialRuntimeSink Renderable3DMaterialRuntimeSink
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
editing::Status EditorStatus
editing::Diagnostic EditorDiagnostic
editing::Value EditorValue
Result< int > publish(Heightmap &target, std::vector< float > candidate)
Publish.
DomainOperation public API.
EditRegion public API.
PropertyDescriptor public API.
PropertyReadResult public API.
EVENGINE_API_PLATFORM public API.
SelectionSnapshot public API.
Stable discovery metadata exposed by every editable target.